我想对输入的字符串执行搜索操作。无论用户输入什么,都应搜索名字和姓氏列。
//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)));
我知道它只是或者条件..请告诉我有没有办法将两列合并并使用条件查询进行搜索
答案 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();