我目前正在阅读弗拉德·米哈尔西娅(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>
在Hibernate文档中进行进一步研究时,我遇到了另外三个属性(enableLazyInitialization
,enableAssociationManagement
,enableExtendedEnhancement
)。但是我在互联网上找不到很多。如果我正确理解,enableAssociationManagement
会使双向关系的独立处理变得多余,并像enableLazyInitialization
一样替换enableDirtyTracking
?不幸的是,我找不到关于enableExtendedEnhancement
的任何信息。这就是为什么我有与上述相同的问题。我应该使用它吗?还是由此带来的不利条件?
答案 0 :(得分:1)
enableAssociationManagement
仅在父实体到子实体之间起作用,反之则不行。因此,它不是很有用。更好的synchronize both ends of a bidirectional association。
enableLazyInitialization
对于惰性属性很有用,如this article中所述。
如果您确保持久性上下文永远不会加载太多实体,则不需要enableDirtyTracking
设置。与使用此设置相比,最好减少持久化上下文的大小。
通过enableExtendedEnhancement
设置,您可以扩展的范围超过实体类,因此字节码增强功能甚至可以超出在实体上调用getter和setter的范围。不建议使用此设置。