JPA Query.getResultList() - 以通用方式使用

2022-09-01 05:33:07

我正在创建一个包含多个表的复杂查询,需要列出结果。通常,我使用并将结果映射到JPA表示:EntityManager

UserEntity user = em.find(UserEntity.class, "5");

然后,我可以访问用户类定义的所有值。但是,如何访问从本机多表查询返回的字段值?我得到的是一个对象列表。到目前为止,这很好,但是那个物体“是什么”呢?数组?地图?收集?...UserEntity

//simpleExample
Query query = em.createNativeQuery("SELECT u.name,s.something FROM user u, someTable s WHERE s.user_id = u.id");
List list = query.getResultList();

//do sth. with the list, for example access "something" for every result row.

我想答案很简单,但大多数例子只是显示了直接转换为targetClass时的用法。

PS:在这个例子中,我当然可以使用类映射。但是在我的情况下,不是由JPA管理的,因此我没有实体,也没有它的类表示,并且由于我像20个表一样连接,我不想创建所有类只是为了访问值。someTable


答案 1

一般规则如下:

  • 如果包含单个表达式并且它是一个实体,则结果是该实体select
  • 如果包含单个表达式并且它是基元,则结果是该基元select
  • 如果包含多个表达式,则结果包含相应的基元/实体selectObject[]

因此,在您的情况下是.listList<Object[]>


答案 2

由于可以使用 JPA 2.0 a:TypedQuery

TypedQuery<SimpleEntity> q = 
        em.createQuery("select t from SimpleEntity t", SimpleEntity.class);

List<SimpleEntity> listOfSimpleEntities = q.getResultList();
for (SimpleEntity entity : listOfSimpleEntities) {
    // do something useful with entity;
}

推荐