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

dig*_*nie 4 java hibernate

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

作为我工作的一部分,我需要通过执行以下操作对右侧"列表"对象进行排序:

Collections.sort(list);
Run Code Online (Sandbox Code Playgroud)

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

session.getTransaction().commitTransaction();
Run Code Online (Sandbox Code Playgroud)

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

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

Ade*_*ari 7

有几种方法可以做到这一点.

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

其次,如果您使用CriteriaAPI查询数据库,则可以使用addOrder()方法添加该order by子句.

第三,你可以order by在你的HQL中直接使用子句.

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