gpt4 book ai didi

java - JPA TypedQuery 错误

转载 作者:行者123 更新时间:2023-11-29 10:03:20 25 4
gpt4 key购买 nike

我收到错误“无法使用请求的结果类型为具有多个返回的查询创建 TypedQuery”

对于在 Glassfish 上使用 JPA 的以下查询,您知道这里出了什么问题吗?我想获取最新的某个扣款状态的扣款记录。

 entityManager.createQuery("select dd, MAX(dd.createdMillis) from T_DEBIT dd" +              
" where dd.debitStatus in (:debitStatus)" +
" and dd.account = :account" , Debit.class)
.setParameter("debitStatus", false)
.setParameter("account", account)
.getSingleResult();

最佳答案

通常为 TypedQuery 指定通用参数。如果您声明了一个 TypedQuery,您将使用一个 Object[] 作为 TypedQuery 的通用参数,因为您正在投影列而不是返回一个完整的实体。

但是,由于您还没有声明 TypedQuery(您使用的是简洁的编码风格),您需要将 Debit.class 更改为 Object[]。 class 因为您没有选择一个对象,而是只选择了两个字段。

 Object[] result = entityManager.createQuery("select dd, MAX(dd.createdMillis) from T_DEBIT dd" +              
" where dd.debitStatus in (:debitStatus)" +
" and dd.account = :account" , Object[].class) //Notice change
.setParameter("debitStatus", false)
.setParameter("account", account)
.getSingleResult();

执行此查询将返回一个 Object[],其中 Object[] 中的每个索引对应于您的 select 语句中的一个字段。例如:

result[0] = dd
result[1] = max(dd.createdMillis)

要避免使用 Object[],您可以创建一个新类以更强类型的方式检索这些值。像这样的东西:

public class Result {

String dd;
Date createdMillis;

public Result(String dd, Date createdMillis) {
super();
this.dd = dd;
this.createdMillis = createdMillis;
}

public String getDd() {
return dd;
}

public void setDd(String dd) {
this.dd = dd;
}

public Date getCreatedMillis() {
return createdMillis;
}

public void setCreatedMillis(Date createdMillis) {
this.createdMillis = createdMillis;
}

}

然后在您的 JPQL 语句中您可以调用构造函数:

Result result = entityManager.createQuery("select NEW fully.qualified.Result(dd, MAX(dd.createdMillis)) from T_DEBIT dd" +              
" where dd.debitStatus in (:debitStatus)" +
" and dd.account = :account" , Result.class)
.setParameter("debitStatus", false)
.setParameter("account", account)
.getSingleResult();

最近,我写了一篇关于这个确切主题的博客。我鼓励您观看我创建的这个视频教程:https://tothought.cloudfoundry.com/post/16

关于java - JPA TypedQuery 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16787529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com