簡體   English   中英

在Hibernate Restrictions條件查詢中組合2個或更多屬性

[英]combining 2 or more properties in Hibernate Restrictions criteria query

我想對輸入的字符串執行搜索操作。 無論輸入什么用戶,都應該在“名字和姓氏”列上進行搜索。

   //pseudo hql query
     Select   E.someproperty ....  from  Entity E    where   upper(E.firstName || '' || E.lastName)  like  upper(+userEntered+'%')  // 

在上面的代碼中,我合並了兩列並在其上進行了搜索。 我想要使​​用休眠條件的類似功能。 我嘗試了以下查詢,但是沒有用

 empCriteria.add(Restrictions.disjunction().add(Restrictions.ilike("firstName",  
   userEntered, MatchMode.START)).add(Restrictions.ilike("lastName", userEntered, 
MatchMode.START))); 

我知道這是公正的還是有條件的。

您不能通過Restrictions來做到這一點。

我強烈建議您在HQL中這樣做,而不要在Criteria實例中使用SQL限制。 如果您開始使用SQL,就有可能破壞可移植性:Hibernate的目的是將這一層抽象掉。

有關更多詳細信息,請參見此SO問題

您可以將Resrtictions.sqlRestriction()與SQL子句一起使用。

不可能那樣做。 由於您需要合並兩列。 因此,請嘗試使用sqlRestrinctions。

有一種方法,例如在映射hbm.xml文件中添加this(||在oracle中表示concat):

<property name="completeName"
   formula="FST_NAME || ' ' || LAST_NAME"/>  

只需在Java bean中添加新屬性:

private String completeName;
public String getCompleteName() {
    return completeName;
}
public void setCompleteName(String completeName) {
    this.completeName = completeName;
}

最終,您可以在重新定義中得到此串聯:

Criteria.add(Restrictions.like("completeName","%"+userEntered+"%").ignoreCase();

ps:如果您直接在java bean上映射,則公式將以這種方式:

@Formula(value="FST_NAME || ' ' || LAST_NAME")
private String completeName;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM