11

我目前正在阅读 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那么独立处理双向关系就变得多余了,而是enableLazyInitializationenableDirtyTracking反射一样替换?

不幸的是,我找不到任何关于enableExtendedEnhancement. 这就是为什么我有与上面相同的问题。我应该只使用它吗?或者它会导致哪些缺点?

4

1 回答 1

14

唯一的enableAssociationManagement工作是从父实体到子实体,而不是相反。所以,它不是很有用。使用添加/删除方法更好地同步双向关联的两端。

enableLazyInitialization可以用于惰性属性,例如惰性获取父端@OneToOne关联,因为默认情况下,即使设置为 ,也会急切地获取该关联FetchType.LAZY

enableDirtyTracking如果您确保 Persistence Context 从不加载太多实体,则不需要该设置。与使用此设置相比,您最好减少持久性上下文大小。

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

于 2019-11-18T19:41:20.707 回答