是否值得使用 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 文档时,我发现了另外三个属性:

但我在互联网上找不到太多相关信息。

如果我没理解错的话,enableAssociationManagement 使双向关系的独立处理变得多余,并像 enableDirtyTracking 一样取代了 enableLazyInitialization 反思?

很遗憾,我找不到任何关于 enableExtendedEnhancement 的信息。这就是为什么我有与上述相同的问题。我应该只使用它吗?或者它会带来哪些缺点?

enableAssociationManagement 仅适用于从父实体到子实体,反之则不行。所以,它不是很有用。使用 add/remove methods.

更好地同步双向关联的两端

enableLazyInitialization 对惰性属性很有用,比如懒惰地获取父端 @OneToOne 关联,因为默认情况下,即使设置为 FetchType.LAZY 也会急切地获取这个关联.

如果您确保 Persistence Context 从不加载太多实体,则不需要 enableDirtyTracking 设置。与使用此设置相比,减少 Persistence Context 大小更好。

enableExtendedEnhancement 设置允许您比实体 类 扩展更多,因此字节码增强甚至可以在调用实体上的 getter 和 setter 之外发挥作用。不推荐此设置。