Hibernate 查询目标列顺序

Posted

技术标签:

【中文标题】Hibernate 查询目标列顺序【英文标题】:Hibernate query target columns order 【发布时间】:2020-04-15 07:43:37 【问题描述】:

考虑一个实体

Class Entity
    String column1;
    String column2;
    String column3;

生成的查询将类似于

Select column1, column2, column3, from Entity;

目标列(column1、column2、column3)在查询中的放置顺序是什么?

假设我希望以特定顺序 [ column3 -> column1 -> column2 ] 生成目标列。如何实现?

【问题讨论】:

Hibernate 不关心数据库中列名的顺序。它将根据您的实体映射生成适当的 SELECT、INSERT、UPDATE 和 DELETE 语句访问此***.com/questions/1298322/… 谢谢纳文。似乎我需要按照 Tim 的建议使用原始查询。 【参考方案1】:

一般而言,您将与 Hibernate 一起使用的模式是执行 HQL 查询,该查询反过来会返回对象/实体列表。在这种情况下,列顺序的概念没有多大意义。例如:

String hql = "FROM Entity AS E";
Query query = session.createQuery(hql);
List<Object> results = query.list();
for (Object o : results) 
    System.out.println("column1 is: " + ((Entity)o).getColumn1());

Java POJO 的字段实际上并没有排序概念。

在对 SQL 数据库执行原始查询的上下文中,您的要求可能是有意义的。在这种情况下,如果您想要不同的订单,那么您的选择列表应该提供该订单,例如

Transaction tx = session.beginTransaction();
SQLQuery query = session.createSQLQuery("select column3, column2, column2 from entity");
List<Object[]> rows = query.list();

在这种情况下,我们按顺序请求了第 3、2 和 1 列。

【讨论】:

谢谢蒂姆。但是,我正在寻找另一种方法,而不是使用原始查询。我需要查询超过 100 行的表,并且它们需要有特定的顺序。 @GamingGod 一般来说,如果您想以特定顺序查看结果集中的列,您需要自己明确指定该顺序。

以上是关于Hibernate 查询目标列顺序的主要内容,如果未能解决你的问题,请参考以下文章

Hibernater入门笔记

hibernater-validator jar包冲突的问题

Hibernate HQL查询语句总结

请说说你对Hibernat的理解?JDBC和Hibernate各有什么优势和劣势?

Hibernate HQL 查询:如何将集合设置为查询的命名参数?

Spring Hiernate整合