Hibernate:在不“触碰”数据库的情况下对列表进行排序

5
我在我的数据库中有一个多对多的关系,我正在使用Hibernate从关系左侧检索单个行。然后,我只需调用getter方法来检索相关联的关系右侧(延迟获取)。作为我的工作的一部分,我需要通过执行以下操作对右侧“列表”对象进行排序:
Collections.sort(list);

当我完成工作后,我目前正在调用:

session.getTransaction().commitTransaction();

尽管我在数据库中没有实际更改任何数据,但是我可以在日志中看到触发了一些INSERT语句。

在这种情况下,我应该怎么做才能按顺序列出列表而不会产生数据库访问?

1个回答

9

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

第一,您可以在集合定义上使用@OrderBy注释。请参阅此链接。用这种方式,Hibernate将附加查询与order by子句。

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

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

第四,您可以在代码中使用比较器。即使在关闭会话/事务之后也可以这样做。在这种情况下,您不需要活动事务;但这可能意味着对部分数据进行排序,因为大多数时候我们不会获取完整的内容,出于性能方面的考虑。在您的情况下,似乎在中途有些变化。然而,请尝试在事务关闭后进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接