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

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

   //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问题的更多细节。


它不可能这样做。 由于您需要合并两列。 所以请在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;
链接地址: http://www.djcxy.com/p/37099.html

上一篇: combining 2 or more properties in Hibernate Restrictions criteria query

下一篇: Mapping Hibernate value from another table for presentation only