jpa将标量值从本机sql转换为实体

时间:2011-12-21 18:22:52

标签: jpa

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();

2 个答案:

答案 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中使用。