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