是否值得使用 Hibernate 字节码增强机制?
Is it worth using the Hibernate Bytecode Enhancement mechanism?
我目前正在阅读 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
使双向关系的独立处理变得多余,并像 enableDirtyTracking
一样取代了 enableLazyInitialization
反思?
很遗憾,我找不到任何关于 enableExtendedEnhancement
的信息。这就是为什么我有与上述相同的问题。我应该只使用它吗?或者它会带来哪些缺点?
enableAssociationManagement
仅适用于从父实体到子实体,反之则不行。所以,它不是很有用。使用 add/remove methods.
更好地同步双向关联的两端
enableLazyInitialization
对惰性属性很有用,比如懒惰地获取父端 @OneToOne
关联,因为默认情况下,即使设置为 FetchType.LAZY
也会急切地获取这个关联.
如果您确保 Persistence Context 从不加载太多实体,则不需要 enableDirtyTracking
设置。与使用此设置相比,减少 Persistence Context 大小更好。
enableExtendedEnhancement
设置允许您比实体 类 扩展更多,因此字节码增强甚至可以在调用实体上的 getter 和 setter 之外发挥作用。不推荐此设置。
我目前正在阅读 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
使双向关系的独立处理变得多余,并像 enableDirtyTracking
一样取代了 enableLazyInitialization
反思?
很遗憾,我找不到任何关于 enableExtendedEnhancement
的信息。这就是为什么我有与上述相同的问题。我应该只使用它吗?或者它会带来哪些缺点?
enableAssociationManagement
仅适用于从父实体到子实体,反之则不行。所以,它不是很有用。使用 add/remove methods.
enableLazyInitialization
对惰性属性很有用,比如懒惰地获取父端 @OneToOne
关联,因为默认情况下,即使设置为 FetchType.LAZY
也会急切地获取这个关联.
如果您确保 Persistence Context 从不加载太多实体,则不需要 enableDirtyTracking
设置。与使用此设置相比,减少 Persistence Context 大小更好。
enableExtendedEnhancement
设置允许您比实体 类 扩展更多,因此字节码增强甚至可以在调用实体上的 getter 和 setter 之外发挥作用。不推荐此设置。