Hibernate:排序列表而不“触摸”数据库

时间:2010-10-11 04:38:20

标签: java hibernate

我的数据库中有多对多的关系,而我正在使用Hibernate从关系的左侧检索单行。然后我只是调用getter方法来检索关系的右侧(lazy fetch)。

作为我工作的一部分,我需要通过这样做来对右侧的“列表”对象进行排序:

Collections.sort(list);

当我完成工作时,我正在打电话:

session.getTransaction().commitTransaction();

即使我没有在数据库中实际更改任何内容,我可以在日志中看到一些INSERT语句被触发。

在这种情况下我应该做些什么,以便我可以在不引起数据库命中的情况下订购列表?

1 个答案:

答案 0 :(得分:7)

有几种方法可以做到。

首先,您可以在集合定义中使用@OrderBy注释。请参阅此处的the link。通过这种方式,Hibernate将使用order by子句附加查询。

第二次,如果您使用Criteria API查询数据库,则可以使用addOrder()方法添加order by子句。

第三次,您可以在HQL中直接使用order by子句。

第四,您可以使用Comparator在代码中执行此操作。即使在关闭会话/事务后,您也可以这样做。在这种情况下,您不需要活动交易;但这可能意味着对部分数据进行排序,因为大部分时间我们都没有获取完整的东西 - 出于性能原因。在你的情况下,似乎中间发生了一些变化。但是,请在关闭事务后尝试对其进行排序。