2012-12-12 17 views
0

我有一個項目,我必須在數據庫上實現一種懶惰的搜索類型。Hibernate 4.0邏輯表達式或條件通過所有類的屬性

我想要做的是使用org.hibernate.criterion.Example,但使用'或'條件爲 每個屬性。

例如,假設我有一個像下面

public class Cat{ 
    private String name; 
    private String breed; 
    private Date birthDay; 
/*getter and setter omitted*/ 
} 

一類,我將所有三個領域的一些價值

Cat cat2Find = new Cat(); 
cat2Find.setName("Nabi"); 
cat2Find.setBreed("That hairless Egyptian cat"); 
cat2Find.setBirthDay(someDate); //5th May 2005 for example 

我想找到一隻貓 ,其名稱是「Nabi」 或品種是「無毛埃及貓」 或其生日是2005年5月5日

我試過使用org.hibern ate.criterion.Example,但show_sql顯示了它對每個字段使用和條件。 我也嘗試使用org.hibernate.criterion.Disjunction與LogicalExpression ,但它遍歷所有字段是如此繁瑣。

我不知道是否有一些類似標準的類。例如,但每個字段的條件爲 ,或者我可以選擇'And'或'OR'。

謝謝你的時間:)

回答

0
// Use disjunction() or conjunction() if you need more than 2 expressions 
Disjunction aOrBOrC = Restrictions.disjunction(); // A or B or C 
aOrBOrC.add(Restrictions.eq("b", "a")); 
aOrBOrC.add(Restrictions.eq("b", "b")); 
aOrBOrC.add(Restrictions.eq("b", "c")); 

// Use Restrictions.and()/or() if you only have 2 expressions 
crit.add(Restrictions.and(Restrictions.eq("a", "abc"), aOrBOrC)); 

這樣ü可以用做簡單的查詢 「和」/ 「OR」。

+0

謝謝,但有沒有一種方法,我可以做到這一點,而無需爲我的bean中的每個屬性添加限制?就像Criteron.Example? – Ascendant