2012-02-28 29 views
1

我有一個類似下面的示例複合鍵的hibernate實體。複合鍵上不區分大小寫休眠條件

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; 
} 

在上面的例子實體具有作爲複合鍵。現在我寫了下面的標準,通過將組合鍵傳遞給crieteria來獲得對象。示例代碼如下。

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

我的問題是:

  1. 我認爲上面的代碼使區分大小寫的搜索。如果我是 我怎麼才能讓它做不區分大小寫的搜索?
  2. 創建如下標準來解決 問題是否正確?

    Criteria 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 2012-02-28 07:31:27

回答

1

你的標準看起來不錯,但你的要求默認情況下做一個不區分大小寫的請求沒有多大意義。數據庫中的幾行會有什麼不同?

我只是確保您的鍵屬性總是小寫,或者通過拋出異常(如果大寫的值傳遞給B構造函數),或者通過自動將它們轉換爲小寫。

如果其他應用程序在數據庫中插入數據,則可以使用數據庫中已檢查的約束執行相同操作。