我怀疑我们的某个应用程序中的某些性能问题是由于hibernate对某些关联的过度加载导致的,这可能通过切换到延迟加载来解决。不幸的是,很难跟踪关联实际使用的方式和时间 - 更不用说它们的使用频率和平均值#34;是否有一些工具(休眠日志记录选项?),它们有助于确定哪些热切加载的关联应该更好地延迟加载和/或切换到其他fetching strategies?
例如,我可以想象一个工具,它表示每个hibernate会话的日志,每个类的对象加载了多少,以及应用程序实际访问了多少对象,甚至生成了一些统计信息。当然,最后只有负载测试可以决定什么是更好的,但这可能会给你一些想法尝试。或许还有更好的工具。
答案 0 :(得分:0)
Hibernate不支持任何LAZY初始化统计信息,因为它只提供了一个框架,但最终,应用程序开发人员有责任决定如何使用它来满足他的项目需求。
EAGER fetching is a code smell。大多数情况下,它是为了简单起见而使用而不考虑长期性能损失。提取策略永远不应该是实体映射责任。
每个业务用例都有不同的实体负载需求,因此应该将获取策略委派给每个单独的查询。
您可以获得的最佳统计信息是log all SQL statements,并确定是否需要执行的查询来满足每个特定的请求要求。
我的建议是支持LAZY关联,并在需要加载一些LAZY关联时使用基于查询的提取指令。