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



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

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

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

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

每个

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

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

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