当前位置: 首页 > 知识库问答 >
问题:

无法使用请求结果类型为具有多个返回的查询创建类型化查询

司空俊悟
2023-03-14

我正在尝试将预言机结果列表绑定到摘要列表。但是我的摘要列表有3个类被定义为DB的实体

我有三个实体类A,B,C

Summary.class
{
    @Autowired
    private A a;

    @Autowired
    private B b;

    @Autowired
    private C c;

    //getters and setters
}

@Enity
class A{
Fields 1..n ;
}  // same goes for other classes definition

我使用以下查询获得结果,但结果无法转换为摘要对象

List<Summary> summaryList = entityManager.createQuery("from A a, B b, C c" +
                " where a.field1 = b.field1 and a.fValue = :fValue " +
                "and b.field3= c.field3", Summary.class)
                .setParameter("fValue ", fValue )
                .getResultList();

调试:我确保结果列表不为空,如果我不将其转换为对象,下面的查询可以正常工作

List summaryList = entityManager.createQuery("from A a, B b, C c" +
                    " where a.field1 = b.field1 and a.fValue = :fValue " +
                    "and b.field3= c.field3")
                    .setParameter("fValue ", fValue )
                    .getResultList();

我看到的第一种方法是遍历summaryList,并像这样将它们分配给单个列表,我还没有测试过这种方法,但我认为它可能会给出一个类强制转换异常,因为强制转换以前也有效

for (int i = 0; i < summaryList.size(); i++) {
   Summary s= (Summary) summaryList.get(i); // might be class cast Exception
   aList.add(s.getA());
   bList.add(s.getB());
}

我想的备选方案2是从db中只获取A类字段列表,将其转换为A的列表,使用蛮力执行3次,直到获得所有字段。

下面是我在创建新问题之前看过的一些问题

使用不同的类来组合多个实体类

获取映射回pojo的列表

请让我知道你的想法,我认为我的主要方法是一种很好的方法,如果可行的话。

共有1个答案

米嘉禧
2023-03-14

您的JPQL select语句< code >“from A A,B b,C C”无法映射回摘要实体,JPA没有足够的信息来执行此操作。< br >

如果在您的逻辑中,一个摘要实例可以由A、B、C组成,那么您可以有一个类似< br >的构造函数

public Summary(A a, B b, C c) {
       .............
}
"select new Summary(a, b, c) FROM A a, B b, C c"
 类似资料:
  • 我收到错误“无法使用请求的结果类型为具有多个返回的查询创建TypeQuery”我尝试了所有列值返回。那次应用程序挂起。我需要在arraylist中获取客户端列表。请帮助,我是JPA新手。 客户端类是

  • 我正在使用以下JPA查询,我得到了java.lang.IllegalArgumentException:无法为具有多个返回异常的查询创建TypeQuery。 谁能告诉我我的问题有什么错吗.....我是JPA的新成员,我不知道这里有什么问题。如果有人有想法,请告诉我。

  • Firebase查询返回此查询的值 该项由model类捕获 但是,返回null

  • 问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用

  • 本文向大家介绍Python中让MySQL查询结果返回字典类型的方法,包括了Python中让MySQL查询结果返回字典类型的方法的使用技巧和注意事项,需要的朋友参考一下 Python的MySQLdb模块是Python连接MySQL的一个模块,默认查询结果返回是tuple类型,只能通过0,1..等索引下标访问数据 默认连接数据库: 查询数据: 打印: 执行结果: 为tuple类型。 我们可以这么干使得

  • 我正在尝试运行一个insert语句,它将帮助我为下面的api调用创建用户帐户。我查看了JMeter JDBC请求,其中包含select/update/ect。。。我没有看到插入查询类型。有人知道我如何运行一些插入查询来创建数据库的用户吗? 谢谢我。