Java 将JPA query.getResultList()转换为我的对象

Java 将JPA query.getResultList()转换为我的对象,java,jpa,jpql,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)

我正在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<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],
                            ...));
}
List rows=query.getResultList();
列表结果=新的ArrayList(rows.size());
对于(对象[]行:行){
结果.添加(新的MyObject((字符串)行[0],
(长)行[1],
...));
}

您正在寻找
选择新的
结构,解释如下:

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

"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"