2014-11-05 91 views
1

我想优化一个页面,其中加载了很多对象,其中许多对象的属性都使用hibernate的延迟加载。但是很难手动找到它们,因为当我看到someItem.getSmth()时,我不知道它实际上是惰性加载的(它不是我的代码),除此之外,我可以跳过这些加载,因此我需要一些自动找到它的方法。我试图打开hibernate的SQL日志记录,但它不可能读取它,因为它每页加载大约50兆日志,它不告诉我查询从哪里调用。是否有可能知道哪些对象是懒加载和从哪里?如何捕捉hibernate的延迟加载?

回答

1

是否有可能知道哪些对象是懒加载和从哪里?

你可以分析你的实体bean的注解OneToOneOneToManyManyToOneManyToMany,如果找到了,检查物业fetch是否具有价值FetchType.LAZY

这可以让你知道哪些对象是懒加载的,哪些类不是调用的方法。

+0

但是这就是我所说的“手动”:)我可以以这种方式错过很多事情,因为有很多对象被加载和很多加载数据的场景,所以很难手动找到所有东西。 – mykola 2014-11-05 10:38:48

+0

@mykola,以及你试图挖掘到50M大滞后“magy”!对于这样的任务,除非已经有一个可以帮助你的工具,否则你将永远不得不手动编写一些小工具来为你自动完成工作,而使用一些正则表达式来解析日志文件。如果您不需要从中调用延迟加载方法的方法,那么答案中的方法是可以的,您不会错过任何内容。另外,请在你的问题中添加你想要了解的一组*事物的描述,这将有助于人们给出更合适的答案。 – A4L 2014-11-05 11:01:35

+0

问题是没有什么可以解析的,因为hibernate日志不包含关于它是否是延迟加载或其他的信息。 – mykola 2014-11-06 10:22:17