首页 > 解决方案 > 如何将原生查询结果映射到 POJO?

问题描述

我有一个复杂的 sql 查询,它连接 7 个表并返回 110 列。我正在尝试使用使用共享实体管理器创建的本机查询。不确定如何将结果集映射到 POJO。将每一列映射到结果集对象数组是可行的,但在代码行方面效率很低。任何建议如何映射它或我可以执行此操作的任何其他方式?

这是我实现的一些伪代码:

Query query = sharedEntityManager.createNativeQuery(
                 " select a.c1, a.c2,.., b.c1, b.c2,.., c.c1, c.c2,...
                   from atab a, btab b, ctab c, ...
                   where condition1, condition2,...");

query.setParameter("param1", param1);

List<Object[]> results = query.getResultList();

List<CustomPojo> retList = new ArrayList<>();
for(Object[] obj : results){
  CustomPojo row = new CustomPojo();
  row.setF1(obj[0].toString());
  row.setF2(obj[1].toString());
  ...
  ...
  retList.add(row);
}
return retList;

标签: hibernatespring-bootjpaspring-data-jpa

解决方案


如果您使用 Spring Data JPA(我们可以假设因为您添加了该标签),那么只需将查询添加到您的 Repository 接口之一:

public interface WhateverRepository extends JpaRepository<...,...>

  ...

  @Query(SELECT NEW com.yourcompany...YourPOJO a.c1, a.c2,.., b.c1, b.c2,.., c.c1, c.c2,...
               from atab a, btab b, ctab c, ...
               where condition1, condition2,...")
  YourPOJO callFancyQuery( arg1, arg2, ...);

Spring Data JPA 将完成剩下的工作。(您可以通过名称来引用查询中的参数::arg1、、:arg2等)


推荐阅读