Java 如何将连接查询映射到JPA中的非实体类?

Java 如何将连接查询映射到JPA中的非实体类?,java,hibernate,jpa,Java,Hibernate,Jpa,冬眠 联接查询可以映射为非实体类 如何在JPA/Hibernate中实现相同的功能?在Hibernate中,您可以在查询的select子句中调用任意类的构造函数 @NamedQuery( name = "myScalarQuery" query = "select new org.stackoverflow.hibernate.QueryResultObject(A.field_a, B.field_b) from A, B where a.someUsefulProperty =

冬眠

联接查询可以映射为非实体类



如何在JPA/Hibernate中实现相同的功能?

在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")
等(注意:需要完全限定的类名)

然后你只需要这个类有一个匹配的构造函数

public class QueryResultObject {

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

}

应该注意的是,这通常是JPA的一个特性(回到JavaEE5,当时JPA从EJB规范中分离出来)。您不必使用Hibernate来使用此功能。此外,这仅适用于JPQL查询,而不适用于本机查询
public class QueryResultObject {

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

}