将JPA query.getResultList()转换为MY Objects

时间:2014-05-06 16:29:37

标签: java jpa jpql

我正在 JPA 中对我的数据库执行查询。查询“查询”4个表,结果聚合来自不同表的列。

我的查询类似于:

Query query = em.createQuery("SELECT o.A, o.B, o.C, e.D, c.E FROM Table1 o, 
Table2 i, Table3 e, Table4 c WHERE o.X = i.X AND i.Y = e.Y AND i.Z = c.Z");

如何获取查询结果并提取不同的字段?

我创建了一个表示结果列表中每个项目的类(MyObject),我希望将query.getResultList()转换为List<为MyObject>

我该怎么做?

2 个答案:

答案 0 :(得分:15)

此类查询返回List<Object[]>。因此,您只需要一个循环将每个数组转换为类的实例:

List<Object[]> rows = query.getResultList();
List<MyObject> result = new ArrayList<>(rows.size());
for (Object[] row : rows) {
    result.add(new MyObject((String) row[0],
                            (Long) row[1],
                            ...));
}

答案 1 :(得分:3)

您正在寻找SELECT NEW构造,在this answer中解释:

"SELECT NEW your.package.MyObject(o.A, o.B, o.C, e.D, c.E) 
   FROM Table1 o, Table2 i, Table4 c
   WHERE o.X = i.X AND i.Y = e.Y AND i.Z = c.Z"

当然,您的MyObject必须有匹配的构造函数。