【问题标题】:Hibernate query target columns orderHibernate 查询目标列顺序
【发布时间】: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 语句访问此stackoverflow.com/questions/1298322/…
  • 谢谢纳文。似乎我需要按照 Tim 的建议使用原始查询。

标签: java sql hibernate


【解决方案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 一般来说,如果您想以特定顺序查看结果集中的列,您需要自己明确指定该顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2020-11-21
  • 2011-06-20
相关资源
最近更新 更多