2012-05-01 5 views
2

に弁別式で使用するユーザー定義関数ことができます私はbitwiseAndと呼ばれる休止中のユーザー定義関数を作成し、以下のように方言のコンストラクタでそれを登録:は、Hibernate

public SQLServerDialect() { 
    super(); 
    registerFunction("bitwiseAnd", new SqlBitwiseFunction("bitwiseAnd", StandardBasicTypes.INTEGER)); 
} 

私が行うために必要なこれはオラクルにとっても同じことです。また、ビットごとの操作に関して異なる構文を使用しているためです。 @DiscriminatorFormulaでこれを使用したいと考えていましたが、登録された関数が表示されていないようです。これは可能ですか、またはディスクリミネータ式はネイティブSQLのみを使用していますか?

おかげで、 R.

答えて

3

次のものが含ま式のjavadocは、へDiscriminatorFormulaリンクのjavadocは:

式が有効なSQLフラグメントにする必要があります。

したがって、式は有効なSQLであり、HQLでなくてはなりません。

+0

乾杯JB、私は多くを考えました。私はしかし、誰かがこれに抗議して、賢明なことを考えていることを期待していました!あなたが特定の状況でネイティブSQLを使用するように強制する病人のビット、一種のHibernate IMOの目的を破る! – Ruaghain

+0

この式は、HQLクエリだけでなく、あらゆる場所(session.get()、Criteria APIなど)で使用する必要があることに注意してください。また、データベーステーブルの列のデータをエンティティプロパティまたはディスクリミネータ値に変換するには、式を定義に使用することを忘れないでください。 HQLを使用した場合、これらの列はエンティティプロパティにマップされていないため、これらの列はどのように参照されますか? –

+0

ああ、もちろん。私はあなたが言っていることを聞いている(冬眠している私の経験不足がここに来ている)。私がHQLを実行しようとしているところでは、関連オブジェクトはまだ作成されていません!うーん、テーブルの構造をビット単位の演算子の使用を必要としないように変更できるかどうか見てみましょう。 JBに感謝します。 – Ruaghain