如何在JPA中将关联查询映射到非实体类?

4

在Hibernate中,可以使用非实体类映射联接查询。请参考如何将数据库查询映射为Java对象?

<class name=... select="select A.field_a, B.field_b, ... from A, B, ...">

我该如何在JPA/Hibernate中实现同样的功能?
1个回答

6
在Hibernate中,你可以在查询的select子句中调用任意类的构造函数。
@NamedQuery( name = "myScalarQuery" query =
"select new org.stackoverflow.hibernate.QueryResultObject(A.field_a, B.field_b) 
  from A, B
  where a.someUsefulProperty = b.someComparableProperty")

etc. (注意需要完整的类名)

然后您只需要拥有一个匹配构造函数的类即可。

public class QueryResultObject {

public QueryResultObject(TypeOfFieldA fieldA, TypeOfFieldB fieldB) {
//etc
}

}

2
需要注意的是,这个构造函数表达式通常是JPA的一个特性(从Java EE 5开始,JPA就从EJB规范中分离出来了)。您不必使用Hibernate来使用此功能。 - dcsohl
1
此外,这仅适用于JPQL查询而不是本地查询。 - VimalKumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接