hibernate - 如何将原生查询结果映射到 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;
解决方案
如果您使用 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
等)
推荐阅读
- javascript - 无法使用 react-router 加载的路由
- c# - 为什么要更新数据库中的整个数据?
- docker - “与命名卷不同,绑定挂载不会自动将容器内容复制到主机”
- java - 无法准备发布,因为您有本地修改:
- javascript - 单击按钮仅在刷新我的页面后才有效
- c - 即使我看不到缺陷,我的链表每次都会导致分段错误
- javascript - 在Javascript中,相同的输入数据只是长度不同,但是长数据并不能正确运行
- java - 使用自定义证书和密钥调用 RestTemplate API
- cryptography - 在将密码存储到数据库之前将盐添加到密码中
- python - 如何使用 Google Directory API 在 members.get() 调用中“includeDerivedMembership”?