Sve*_* M. 8 java orm hibernate lazy-loading byte-code-enhancement
我目前正在阅读 Vlad Mihalcea 的书High-Performance Java Persistence。
在字节码增强部分,据说enableDirtyTracking可以通过替换反射来优化大量数据的性能。但我只是想知道是否有任何缺点?
不幸的是,我找不到任何或只有非常旧的信息。
<plugin>
<groupId>org.hibernate.orm.tooling</groupId>
<artifactId>hibernate-enhance-maven-plugin</artifactId>
<version>${hibernate.version}</version>
<executions>
<execution>
<configuration>
<failOnError>true</failOnError>
<enableDirtyTracking>true</enableDirtyTracking>
<enableLazyInitialization>false</enableLazyInitialization>
<enableAssociationManagement>false</enableAssociationManagement>
<enableExtendedEnhancement>false</enableExtendedEnhancement>
</configuration>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
在进一步研究 Hibernate 文档时,我发现了另外三个属性:
enableLazyInitialization, enableAssociationManagement, enableExtendedEnhancement. 但我在互联网上找不到太多关于它的信息。
如果我理解正确,是否enableAssociationManagement使双向关系的独立处理变得多余并替换enableLazyInitialization为enableDirtyTracking反射?
不幸的是,我找不到任何关于enableExtendedEnhancement. 这就是为什么我有与上述相同的问题。我应该只使用它吗?或者由此产生哪些缺点?
Vla*_*cea 12
该enableAssociationManagement只从父母工作到子实体,而不是周围的其他方法。所以,它不是很有用。使用添加/删除方法更好地同步双向关联的两端。
的enableLazyInitialization可以是用于懒惰属性是有用的,像取母体侧@OneToOne懒惰地关联,如通过默认,这个人是取出热切即使当设置为FetchType.LAZY。
enableDirtyTracking如果您确保 Persistence Context 永远不会加载太多实体,则不需要该设置。与使用此设置相比,您最好减少 Persistence Context 的大小。
该enableExtendedEnhancement设置允许您扩展比实体类更多的内容,因此字节码增强甚至可以超越对实体调用 getter 和 setter。不推荐此设置。