2014-09-26 72 views
4

直观地说,就是我想要做的是这样的:使用Hibernate的Criteria API,我可以使用concat和ilike限制吗?

Restrictions.ilike("concat(user.firstName, ' ', user.lastName)", 
    text.toLowerCase() + "%") 

但是,我知道,这是行不通的,因为concat(user.firstName, ' ', user.lastName)是不是休眠理解的属性,尽管这是我会作为where子句的一部分,在常规SQL语句中键入。

有没有什么简单的方法可以让Hibernate Criteria API进行限制,还是我不得不退而求其次的HSQL?

感谢

回答

4

一种解决方案是在User类中定义fullName属性。

@Formula(value="first_name || ' ' || last_name") 
private String fullName; 

,然后使用该申请在Criteria

criteria.add(Restrictions.ilike("fullName", text.toLowerCase() + "%")); 
+0

该解决方案的工作。对于那些一起使用hsqldb和mysql的人,你可能想要使用这个公式:'ltrim(concat(concat(first_name,'',last_name))' – egervari 2014-09-27 01:20:41

0

我在SQL有点软,因此语句可能不是100%准确。

显然,这不是ilike但如果你想使用SQL,为什么不使用sqlRestriction而不是参数?

Restrictions.sqlRestriction("select * from user where concat(user.firstName, ' ', user.lastName) like ?", text.toLowerCase() + "%", StandardBasicTypes.STRING); 

我认为我们的目标是能够使便携式限制,在这种情况下,这可以为你的企图ILIKE子。

相关问题