我怀疑我们的一个应用程序中的某些性能问题是由 hibernate 状态对某些关联的过多急切加载引起的,这可能会通过切换到延迟加载来解决。不幸的是,很难跟踪实际使用关联的方式和时间——更不用说“平均”使用它们的频率了。是否有一些工具( hibernate 日志记录选项?)有助于决定哪些急切加载的关联应该更好地延迟加载和/或切换到其他 fetching strategies

例如,我可以想象一个工具,它为每个 hibernate session 的日志显示每个类的多少个对象被加载以及其中有多少被应用程序实际访问,或者甚至生成一些关于此的统计信息。当然,最终只有负载测试才能决定哪个更好,但这可能会给您一些尝试尝试的想法。或者也许有更好的工具。

最佳答案

Hibernate 不支持任何 LAZY 初始化统计,因为它只提供一个框架,但最终,应用程序开发人员有责任决定如何使用它来满足他的项目需求。

EAGER fetching is a code smell 。大多数情况下,它是为了简单起见而不考虑长期性能损失。获取策略永远不应该是实体映射的责任。

每个业务用例都有不同的实体负载要求,因此应该将获取策略委托(delegate)给每个单独的查询。

您可以获得的最佳统计数据是简单的 log all SQL statements 并决定是否需要执行的查询来满足每个特定的请求要求。

我的建议是支持 LAZY 关联,并在需要加载某些 LAZY 关联时使用基于查询的 fetch 指令。

关于java - Hibernate:是否可以找出实际使用了哪些急切加载的集合?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29576279/

10-12 00:13
查看更多