当前位置: 首页 > 面试题库 >

使用CriteriaBuilder时发生编译错误

邹学民
2023-03-14
问题内容

我正在尝试将此JPA QL转换为条件构建器。JBoss 6.0。

"SELECT ba FROM BankAccount ba WHERE ba.balance >= :amt ORDER BY ba.ownerName ASC"

我根据一些教程编写了此代码。

public List<BankAccount> findWithBalance(int amount) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<BankAccount> cq = cb.createQuery(BankAccount.class);
    Root<BankAccount> from = cq.from(BankAccount.class);

    ParameterExpression<Integer> balance = cb.parameter(Integer.class);
    cq.select(from);

    Predicate predicate = cb.gt(from.get("balance"), balance);
    cq.where(predicate);

    cq.orderBy(cb.asc(from.get("ownerName")));

    TypedQuery<BankAccount> query = em.createQuery(cq);

    return query.getResultList();
}

但是,我在一行中遇到了一个编译错误:

Predicate predicate = cb.gt(from.get("balance"), balance);

错误是:

The method gt(Expression<? extends Number>, Expression<? extends Number>) in the type CriteriaBuilder is not applicable for the arguments (Path<Object>, ParameterExpression<Integer>)

问题答案:

好吧,我终于找到了调用gt()方法的正确方法。这是完整的解决方案。在JBoss 6中经过全面测试。

public List<BankAccount> findWithBalance(int amount) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<BankAccount> cq = cb.createQuery(BankAccount.class);
    Root<BankAccount> from = cq.from(BankAccount.class);

    ParameterExpression<Integer> balance = cb.parameter(Integer.class);
    cq.select(from);

    //Here is the trick!
    Predicate predicate = cb.gt(from.<Integer> get("balance"), balance);

    cq.where(predicate);
    cq.orderBy(cb.asc(from.get("ownerName")));

    TypedQuery<BankAccount> query = em.createQuery(cq);

    query.setParameter(balance, amount);

    return query.getResultList();
}


 类似资料:
  • 我尝试使用shared_ptrs创建一个单例对象。但是,当构造函数/析构函数对特定对象是私有的时,代码不会编译 我正在使用VS17编译器创建的错误如下 错误C2440:":无法从'_Ux*'转换为'std::shared_ptr'与[_Ux=ThreadPool]包含\内存(1462):注意:没有构造函数可以采取源类型,或构造函数重载解决方案是含糊不清的threadpool.cpp(9):注意:请

  • 我正在开发一个应用程序,突然我开始得到构建错误, 我也尝试过增加java的堆大小,但没有任何效果,有人能帮我放吗? 这是日志。。。。 有什么建议吗?

  • 我试着运行一个thrift网站上提供的thrift服务器和客户端程序,我得到了以下错误。谁能帮我解决这些错误吗。编码可以在以下位置找到:https://thrift.apache.org/tutorial/java

  • 问题内容: 我正在使用Spring Integration Java DSL v。1.2.2并遵循一些示例,我尝试编写代码以轮询文件夹 该代码无法编译,因为 如何解决此问题以及如何添加固定间隔的轮询? 问题答案: 尚不清楚您的IDE中发生了什么,但是我们在测试用例中有以下示例: 这是您有关的第二个问题的答案。 https://github.com/spring-projects/spring-in

  • get1方法工作正常,但get2存在编译错误: > 类型A.B的方法get2(集合)必须重写或实现超类型方法 只有带有泛型的参数才会出现此错误<代码>get3编译,但当然有一个警告: > 显然还有其他方法可以解决这个问题,但在我的理解中,这应该是一个法律优先事项,我的问题更多的是为什么会有这个编译错误。提前谢谢! 编辑: 对不起,我的例子不够清楚。因此,这里有一个新的答案来回应你的一些观点。 与上

  • 我们试图从Jenkins构建一个maven工件并将其部署到我们的Nexus存储库管理器中,但是我们在构建过程中遇到了编译错误。这就是我们得到的错误! 错误]无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.5.1:在项目上编译(default-compile)studentapp:编译失败错误]此环境中没有提供编译器。您可能是在JRE上运