我目前正在阅读Vlad Mihalcea的书。高性能的Java持久性.
在 "字节码增强 "一节中,说到 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
. 所以我有和上面一样的问题。我应该只用它吗?或者说它会带来哪些弊端?
该 enableAssociationManagement
只从父实体到子实体,而不是反过来。所以,它不是很有用。更好的 异曲同工.
该 enableLazyInitialization
可以对懒惰属性有用,如在 本文.
该 enableDirtyTracking
如果你确保持久化上下文永远不会加载太多实体,就不需要这个设置。你最好减少持久化上下文的大小,而不是使用这个设置。
在这里,你最好减少持久化上下文的大小,而不是使用这个设置。enableExtendedEnhancement
设置允许您扩展比实体类更多的功能,因此字节码增强甚至可以在调用实体上的getters和setters之外工作。不推荐使用此设置。