将数据转换为列表来自JPQL

时间:2016-09-08 06:00:18

标签: jpa jpql

当我运行以下JPQL时,我有一个包含200列且包含许多行数据的实体。

    StringBuffer nativeQuery = new StringBuffer();
    nativeQuery.append("SELECT b FROM PeopleMaster b WHERE b.gdGrp=?1");

    query = getEntityManager().createQuery(nativeQuery.toString());
    query.setParameter(1, searchParam.getCode());

    List<PeopleMaster> list = query.getResultList();

列表正确填充和遍历下一部分。 现在我要求我只需要一列数据用于下拉列表。

    StringBuffer nativeQuery = new StringBuffer();
    nativeQuery.append("SELECT distinct(b.empId) FROM PeopleMaster b WHERE b.gdGrp=?1");

我知道将结果分配给PeopleMaster(List<PeopleMaster> list)是不兼容的,因为我们只提取一列数据。

那么适当的分配方式是什么?我是否需要创建一个包含一列的新实体,然后将结果分配给List?

1 个答案:

答案 0 :(得分:1)

使用createNativeQuery

StringBuffer nativeQuery = new StringBuffer();
nativeQuery.append("SELECT distinct(b.empId) FROM PeopleMaster b WHERE b.gdGrp=?1");
Query q = getEntityManager().createNativeQuery(nativeQuery.toString());
query.setParameter(1, searchParam.getCode());

List<Object[]> ids = q.getResultList();

for (Object[] record : ids) {
    System.out.println("Found a distinct employee id: " + record[0]);
}

如您所见,从createNativeQuery返回的结果是List<Object>,每条记录对应一个对象数组。在您的情况下,每条记录只有一列ID。