休眠-字节码增强

我目前正在阅读弗拉德·米哈尔西娅(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文档中进行进一步研究时,我遇到了另外三个属性(enableLazyInitializationenableAssociationmanagementenableExtendedEnhancement)。但是我在互联网上找不到很多。如果我正确理解,enableAssociationmanagement会使双向关系的独立处理变得多余,并像enableLazyInitialization一样替换enableDirtyTracking?不幸的是,我找不到关于enableExtendedEnhancement的任何信息。这就是为什么我有与上述相同的问题。我应该使用它吗?还是由此带来的不利条件?

zhujun1918 回答:休眠-字节码增强

enableAssociationManagement仅在父实体到子实体之间起作用,反之则不行。因此,它不是很有用。更好的synchronize both ends of a bidirectional association

enableLazyInitialization对于惰性属性很有用,如this article中所述。

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

通过enableExtendedEnhancement设置,您可以扩展的范围超过实体类,因此字节码增强功能甚至可以超出在实体上调用getter和setter的范围。不建议使用此设置。

本文链接:https://www.f2er.com/3131836.html

大家都在问