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

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

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

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

  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。

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

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

  

简单地添加java bean,新的礼节:

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

最后你可以在你的restrinction中得到这个连接:

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

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

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