2010-07-26 53 views
2

我有搜索查詢,有許多可選參數,然後搜索字段,搜索許多列。有沒有可能爲此目的使用hibernate標準?我需要用相同的搜索詞搜索許多列。是否可以使用Hibernate Criteria在多列上搜索相同的值?

示例代碼(什麼是不正常工作)

if(isNotEmpty(searchWord)) 
{ 
    criteria.add(Restrictions.like("description", searchWord)); 
    criteria.add(Restrictions.like("name", searchWord)); 
} 
+0

是的,這不應該是一個問題。但*究竟是什麼*不起作用?當你在這個時候,你可能還想把「serachWord」改名爲「searchWord」。 – 2010-07-26 08:04:47

+0

如果搜索詞未包含在名稱和說明列中,則它將不返回結果。 – newbie 2010-07-26 08:06:54

回答

1

我解決了這個在這裏使用自定義的SQL限制,例如:

Object[] values = { }; // values here 
Type[] types = { }; // value types here 
criteria.add(Restrictions.sqlRestriction("sql query here", values, types)); 
2

它看起來像你實際上需要一個OR:

Criterion description = Restrictions.like("description", searchWord); 
Criterion name = Restrictions.like("name", searchWord); 
LogicalExpression orExp = Restrictions.or(description, name); 
criteria.add(orExp); 
+0

+1 Thanx爲此,但它只允許在這兩個值或,所以我使用SQL限制。 – newbie 2010-07-28 11:20:37

+0

嗨在這裏的criteria.add(Restrictions.sqlRestriction(「sql查詢在這裏」,值,類型));我必須通過的類型。 – bharathi 2014-06-30 12:07:49

1

通過使用Disjunction我們添加了任意數量的列,最後將Disjunction obj添加到條件。

Disjunction disCriteria = Restrictions.disjunction(); 
disCriteria.add(Restrictions.eq("name", searchWord)); 
disCriteria.add(Restrictions.eq("description", searchWord)); 
criteria.add(disCriteria); 
相關問題