使用Hibernate的Criteria API,我可以使用带有ilike限制的concat吗?

时间:2014-09-26 20:34:20

标签: java sql hibernate concat hibernate-criteria

直观地说,我想做的是这样的事情:

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

但是,我知道这不起作用,因为concat(user.firstName, ' ', user.lastName)不是Hibernate理解的属性,即使这是我在常规SQL语句中作为where子句的一部分键入的内容。< / p>

有没有简单的方法可以使用Hibernate Criteria API进行限制,或者我是否需要依靠优质的HSQL?

由于

2 个答案:

答案 0 :(得分:4)

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

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

然后在Criteria

中使用该字段
criteria.add(Restrictions.ilike("fullName", text.toLowerCase() + "%"));

答案 1 :(得分:0)

我在SQL上有点软盘,所以声明可能不是100%准确。

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

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

我认为我的目标是能够制作一个便携式限制,在这种情况下,这可以用于你的尝试ilike。