如何在Hibernate中返回特定类型的列表而不是List <Object []>?

use*_*430 10 java hibernate casting hql

我有课程树:

classA {  
      classB b;  
      classC c;
      .....
} 
Run Code Online (Sandbox Code Playgroud)

我有这样的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 
Run Code Online (Sandbox Code Playgroud)

此查询返回List<Object[]>.

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

classD {
    Type1 fiedl1;
    Type2 field2;
    Type3 field3;
}
Run Code Online (Sandbox Code Playgroud)

那么可以通过Hibernate进行转换,还是我需要手动完成所有的转换?

JMe*_*nik 26

JPA查询中有不同类型的选择.您当前正在使用Array作为返回类型,您需要的是构造返回类型.以下是如何实现这一目标:

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();
Run Code Online (Sandbox Code Playgroud)

基本上有两件事:

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

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