我的数据库中有多对多的关系,而我正在使用Hibernate从关系的左侧检索单行。然后我只是调用getter方法来检索关系的右侧(lazy fetch)。
作为我工作的一部分,我需要通过这样做来对右侧的“列表”对象进行排序:
Collections.sort(list);
当我完成工作时,我正在打电话:
session.getTransaction().commitTransaction();
即使我没有在数据库中实际更改任何内容,我可以在日志中看到一些INSERT语句被触发。
在这种情况下我应该做些什么,以便我可以在不引起数据库命中的情况下订购列表?
答案 0 :(得分:7)
有几种方法可以做到。
首先,您可以在集合定义中使用@OrderBy
注释。请参阅此处的the link。通过这种方式,Hibernate将使用order by
子句附加查询。
第二次,如果您使用Criteria
API查询数据库,则可以使用addOrder()
方法添加order by
子句。
第三次,您可以在HQL中直接使用order by
子句。
第四,您可以使用Comparator在代码中执行此操作。即使在关闭会话/事务后,您也可以这样做。在这种情况下,您不需要活动交易;但这可能意味着对部分数据进行排序,因为大部分时间我们都没有获取完整的东西 - 出于性能原因。在你的情况下,似乎中间发生了一些变化。但是,请在关闭事务后尝试对其进行排序。