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

时间:2016-06-29 18:37:30

标签: java oracle hibernate spring-boot hql

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

以下是我在创建新问题之前所看到的一些问题

Uses a different class to combine multiple entity classes

gets a list back mapped to pojo

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

1 个答案:

答案 0 :(得分:2)

您的JPQL select语句chrome.storage.local.get无法映射回Summary实体,JPA没有足够的信息来执行此操作。

如果在您的逻辑中,摘要实例可以由A,B,C组成,那么您可以使用类似的构造函数

public Summary(A a, B b, C c) {
       .............
}

并将您的选择参数更改为

"select new Summary(a, b, c) FROM A a, B b, C c"