Hibernate:是否有可能找出实际使用了哪些急切加载的集合?

Han*_*örr 5 java persistence hibernate jpa

我怀疑我们的一个应用程序中的一些性能问题是由于休眠过度急切加载某些关联而引起的,这可以通过切换到延迟加载来解决。不幸的是,跟踪这些关联的实际使用方式和时间非常困难,更不用说“平均”使用它们的频率了。是否有一些工具(休眠日志记录选项?)可以帮助决定哪些急切加载的关联应该更好地延迟加载和/或切换到其他获取策略

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

Vla*_*cea 1

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

\n\n

EAGER fetching 是一种代码味道。大多数情况下,它\xe2\x80\x99s是为了简单起见而使用的,而不考虑长期性能损失。获取策略永远不应该是实体映射的责任。

\n\n

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

\n\n

您可以获得的最佳统计信息是简单地记录所有 SQL 语句,并决定是否需要执行的查询来满足每个特定的请求要求。

\n\n

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

\n