【问题标题】:jpa criteriabuilder upper gives compilation errorjpa criteriabuilder upper 给出编译错误
【发布时间】:2014-07-17 16:58:27
【问题描述】:

我打算将 CriteriaBuilder 用于不区分大小写的查询,如此处hibernate jpa criteriabuilder ignore case queries 以及网络上的许多其他问题和教程中所述。

我的代码是:

public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
    return builder.equal(builder.upper(root.get("firstName")), "test".toUpperCase());
}

但我收到编译时错误:

类型CriteriaBuilder中的upper(Expression)方法不适用于参数(Path)

我使用的hibernate jpa版本是:

<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>

这取决于我使用的休眠版本吗?如何在此处放置 Expression 而不是 Path

感谢您的帮助

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    正如编译器所说,在这种情况下,我们期望 Expression 是从 Expression 扩展而来的,但由于以下原因,您有一个解决此问题的路径。

    return builder.equal(builder.upper(root.<String> get("firstName")), "test".toUpperCase());
    

    技巧是在get方法之前添加&lt;String&gt;,希望对您有所帮助。

    【讨论】:

    • 谢谢!这就是问题所在,我想知道表达式与路径,我错过了它期待一个字符串而不是一个对象的观点
    • 这对我也有帮助。谢谢你。顺便说一句,这是我的小sn-p,以防这可以帮助其他人。 criteriaQuery.select(cb.greatest(from.get(EVENT_TIME_STAMP)));
    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 2023-03-26
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2013-07-02
    相关资源
    最近更新 更多