EclipseLink 2.5 (JPA 2.1) では、ネイティブ クエリの結果を POJO にマップしようとしています。これらのリンクによると、これは可能なはずです。
- JPA : ネイティブ クエリの結果セットを POJO クラス コレクションに変換する方法
- http://www.eclipse.org/eclipselink/api/2.5/javax/persistence/ConstructorResult.html
...次の構文を使用します(EclipseLink 2.5 APIドキュメントから直接取得):
Query q = em.createNativeQuery(
"SELECT c.id, c.name, COUNT(o) as orderCount, AVG(o.price) AS avgOrder " +
"FROM Customer c, Orders o " +
"WHERE o.cid = c.id " +
"GROUP BY c.id, c.name",
"CustomerDetailsResult");
@SqlResultSetMapping(
name="CustomerDetailsResult",
classes={
@ConstructorResult(
targetClass=com.acme.CustomerDetails.class,
columns={
@ColumnResult(name="id"),
@ColumnResult(name="name"),
@ColumnResult(name="orderCount"),
@ColumnResult(name="avgOrder", type=Double.class)
}
)
}
)
ただし、@SqlResultSetMapping の「classes」属性が見つかりません。Eclipselink 2.5.2 および 2.6 で試しました。その機能を得るために使用する必要がある別の (オプションの) EclipseLink jar はありますか?