将休眠查询的结果转置为 POJO 列表

Posted

技术标签:

【中文标题】将休眠查询的结果转置为 POJO 列表【英文标题】:Transpose result of hibernate query into list of POJOs 【发布时间】:2016-10-11 09:34:52 【问题描述】:

我有一个泛型类,其中包含具有以下代码设置的 runQuery 方法:

public Object runQuery(String query) 

       Query retVal = getSession().createSQLQuery(query);


     return retVal.list();
   

我正在尝试弄清楚如何将返回的值转换为 Check 对象列表(List):

public class Check 
  private int id;
  private String name;
  private String confirmationId;

//getters and setters
    

我运行的大多数查询实际上都存储在 mysql 中。我知道本机查询和 resultTransforms(如果实施将意味着我必须更改我的泛型而不是在那之后)。 有什么想法可以通过当前设置完成吗?

【问题讨论】:

我相信您正在尝试使用 hibernate 作为 ORM,互联网上有大量关于此的教程:mkyong.com/tutorials/hibernate-tutorials(我建议使用注释而不是 xml 映射) @Asoub 教程到底是什么?你能指出解决我所描述问题的那个吗? 【参考方案1】:

您可以找到有关 ORM 的教程 (What is Object/relational mapping(ORM) in relation to Hibernate and JDBC?)。

基本上,您向您的 Check 类添加注释以告诉 Hibernate 哪些 java 字段与哪个 DB 字段匹配,发出 JPQL(看起来像 SQL)请求,它会获取您的对象并将它们从 DB 映射到 POJO。

这是一个广泛的主题,这是一个好的开始:https://www.tutorialspoint.com/hibernate/hibernate_quick_guide.htm 这将需要一些配置,但这是值得的。这是一个关于基于注释的配置的教程:https://www.tutorialspoint.com/hibernate/hibernate_annotations.htm,但对 ORM 的工作原理的解释较少(还有 EclipseLink 作为 ORM)

否则,您可以创建自己的映射器,它从ResultSet 获取值,并将它们设置在您的类中。出于很多原因,我会推荐使用 ORM 而不是这种方法(除非你只有一个类存储在数据库中,我对此表示怀疑)。

【讨论】:

您能解释一下您的回答如何帮助我将 retVal.list() 从存储过程调用中转置为 List 吗? 设置休眠 ORM 环境后,您将使用类似 List<Check> yourCheckList = getEntityManager().createQuery("Select c From Check where c.name=:yourNameParametr" , Check.class).setParameter("yourNameParameter", "todolist").getResultList(); 的配置,它会自动将 JPQL 结果转换为您的类列表。 您需要重新阅读问题,我不需要帮助设置休眠引擎。我需要将 list() 返回值转置为 List journaldev.com/3422/hibernate-native-sql-query-example 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于将休眠查询的结果转置为 POJO 列表的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 将行动态转置为列

将 QUERY 结果的 GROUPS 组转置为单列

Postgresql 查询将列转置为行

大查询 - 将数组/json 对象转置为列

Oracle:将列转置为行

mysql 将行转置为列