在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;
- 基于Hibernate的Java Servlet应用程序中的Hibernate Communications Link失败,由MySQL提供支持
- 将Hibernate实体映射为未知的DiscriminatorValue for InheritanceType.SINGLE_TABLE
- 由于Bean Validation API而无法启动Hibernate Validator
- 具有LEAST和GREATESTfunction的JPA CriteriaQuery
- ‘field list’gwt项目中的未知列’… jdoDetachedState’
- Hibernate配置错误(找不到元素’hibernate-configuration’的声明)
- 通过hibernate的Joda-Money持久性
- hibernate列名称问题
- Hibernate参数化sql查询慢和活动的oracle会话