在Hibernate Restrictions条件查询中组合2个或更多属性

时间:2014-08-28 11:09:20

标签: java hibernate

我想对输入的字符串执行搜索操作。无论用户输入什么,都应搜索名字和姓氏列。

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

在上面的代码中,我合并了两列并对其进行了搜索。我希望使用hibernate标准的类似功能。  我尝试了以下查询,但它没有工作

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

我知道它只是或者条件..请告诉我有没有办法将两列合并并使用条件查询进行搜索

4 个答案:

答案 0 :(得分:2)

您无法使用Restrictions执行此操作。

我强烈建议在HQL中执行此操作,而不是在Criteria实例中使用SQL限制。如果你开始使用SQL,你就有可能破坏可移植性:Hibernate的目的是抽象出那层。

有关详细信息,请参阅this SO question

答案 1 :(得分:2)

您可以将mm与SQL子句一起使用。

答案 2 :(得分:1)

不可能这样做。因为您需要合并两列。所以请尝试使用sqlRestrinctions。

答案 3 :(得分:0)

有一种方法,例如在你的映射hbm.xml文件中添加这个(||表示在oracle中连接):

double

简单地添加java bean,新的特性:

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

最后,您可以在重新启动中获得此连接:

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

ps:如果你直接在java bean上映射我们这样的公式:

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