一尘不染

如何返回特定类型的列表而不是列表 在休眠状态?

hibernate

我有课程树:

classA {  
      classB b;  
      classC c;
      .....
}

我有这样的HQL查询:

SELECT a.field1, b.field2, c.field3, c.field4
FROM a LEFT OUTER JOIN b ON a.id = b.fk
       LEFT OUTER JOIN c ON b.id = c.fk

此查询返回List<Object[]>

是否可以将返回的数据强制转换为以下类:

classD {
    Type1 fiedl1;
    Type2 field2;
    Type3 field3;
}

那么Hibernate可以进行铸造吗?还是我需要手动进行所有铸造?


阅读 198

收藏
2020-06-20

共1个答案

一尘不染

JPA查询中有不同类型的选择。 您当前正在使用Array作为返回类型,您需要的是Construct返回类型。 这是实现此目的的方法:

String queryStr =
    "select NEW package.YourDefinedCustomClass(
     a.field1, b.field2, c.field3, c.field4) from a left outer join b 
     on a.id=b.fk left outer join c on b.id=c.fk";

TypedQuery<YourDefinedCustomClass> query =
    em.createQuery(queryStr, YourDefinedCustomClass.class);

List<YourDefinedCustomClass> results = query.getResultList();

基本上有两件事:

  1. 自定义类必须是您的结果返回类型
  2. 自定义类必须具有一个构造函数,该构造函数采用您在查询字符串中定义的结果值。

阅读有关JPA2查询中选择的更多信息。

2020-06-20