2012-02-28 12 views
1

以下のサンプルのような複合キーを持つ休止状態のエンティティを持っています。上記の例では複合キーの大文字と小文字を区別しないハイバネート基準

class A{ 
B id; //this is the composite key for this class 
int property1; 
int property2; 
int property3; 
//getters and setters 
} 

class B{ 

String prop1; 
String prop2; 
String prop3; 
} 

エンティティは複合キーとしてBを有しています。今私はオブジェクトを複合キーをcrieteriaに渡すことによって以下の基準を書きました。サンプルコードは以下の通りです。

B id=new B("Prop1Val","Prop2Val","Prop3Val"); 
(A) sessionFactory.getCurrentSession().get(A.class,id) 

私の質問は以下のとおりです。

  1. 私は上記のコードは大文字と小文字を区別し、検索可能と仮定します。私が の場合は、どうすれば大文字と小文字を区別しない検索を行うことができますか?
  2. の問題を解決するには、以下のような基準を作成するのは正しいですか?

    基準criteria = sessionFactory.getCurrentSession()。createCriteria(A.class); criteria.add(Restrictions.eq( "id.prop1"、id.getProp1())。ignoreCase()); criteria.add(Restrictions.eq( "id.prop2"、id.getProp2())。ignoreCase()); criteria.add(Restrictions.eq( "id.prop3"、id.getProp3())。ignoreCase());

  3. デフォルトでは、 の大文字小文字を区別するためにhbmファイルを設定する簡単な方法はありますか?

私を助けてください。

+0

参照:http://stackoverflow.com/questions/8636038/how-to-do-case-insensitive-search-in-hibernate-using-criteria – user1016403

答えて

1

基準は正常ですが、デフォルトでは大文字と小文字を区別しないgetを実行するリクエストはあまり意味がありません。データベース内のいくつかの行で何が行われるのですが、PKだけが異なる場合がありますか?

大文字の値がBコンストラクタに渡された場合に例外をスローするか、小文字に自動的に変換することによって、キーのプロパティが常に小文字であることを確認します。

他のアプリがデータベースにデータを挿入する場合、データベース内のチェックされた制約を使用して同じことができます。

関連する問題