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



我试图将oracle结果列表绑定到摘要列表。但是我的summary列表有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

我用下面的查询得到结果,但是结果不能强制转换为Summary对象

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();

调试:我确保resultslist不是空的,下面的查询工作良好,如果我不将其转换为对象

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();

我看到的替代方法1是迭代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());
}

我想的另一种选择是从数据库中获取A类字段列表,将其转换为A的列表,执行3次蛮力,直到我得到所有字段。

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

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

将一个列表映射回pojo

请让我知道你的想法,我认为我的主要方法是好方法,如果它有效。

您的JPQL select语句"from A a, B b, C c"不能映射回Summary实体,JPA没有足够的信息来做这件事。

如果在你的逻辑中,一个总结实例可以由a, B, C组成,那么你可以有一个像
这样的构造函数

public Summary(A, B, C, C) {.............} 

并将select语句更改为
"select new Summary(a, b, c) FROM a a, b b, c c"

最新更新