JPA中是否有办法使用createNativeQuery将随机选择子句值转换为域对象。域管理对象
我有以下sql查询
select name, count(*) as cnt, sum(average_events)/count(*) as avg_events from (complex subquery)
我想将值a,b,c转换为具有三个实例变量a,b和c的域对象。此域对象不由JPA管理,因此没有@Entity且没有相应的表。
目前我正在执行以下操作,它返回一个对象列表。
Query query = objectManager.getEntityManager().createNativeQuery(sqlStr);
List resultList = query.getResultList();
答案 0 :(得分:5)
使用以下语法:
SELECT new foo.MyCustomObject(a, b, c) FROM ...
其中MyCustomObject
是具有匹配的consdtructor的任何类:
public class MyCustomObject {
private final String name;
private final int cnt;
private final float avg;
public MyCustomObject(String name, int cnt, float avg) {
this.name = name;
this.cnt = cnt;
this.avg = avg;
}
//...getters
}
斯卡拉奖金:等同类:
class MyCustomObject(name: String, cnt: Int, avg: Float)
//no, actually that's it
答案 1 :(得分:2)
只需将“resultClass”传递给createNativeQuery调用即可。当然可以在DataNucleus JPA中使用。