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

zaw*_*tut 4 java hibernate jpa

在休眠

连接查询可以与非实体类映射.如何将数据库查询映射到Object [在Java中]?

<class name=... select="select A.field_a, B.field_b, ... from A, B, ...">
Run Code Online (Sandbox Code Playgroud)

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

Aff*_*ffe 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")
Run Code Online (Sandbox Code Playgroud)

等(注意完全限定的类名是必需的)

那么你只需要具有匹配构造函数的类

public class QueryResultObject {

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

}
Run Code Online (Sandbox Code Playgroud)

  • 应该注意的是,[构造函数表达式](https://docs.oracle.com/javaee/5/tutorial/doc/bnbuf.html#bnbw)一般是JPA的一个特性(当JPA时回到Java EE 5)从EJB规范中分离出来).您没有*使用Hibernate来使用此功能. (2认同)