Hibernate字节码增强机制值得使用吗?

问题描述 投票:2回答:1

我目前正在阅读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. 所以我有和上面一样的问题。我应该只用它吗?或者说它会带来哪些弊端?

java hibernate orm lazy-loading byte-code-enhancement
1个回答
3
投票

enableAssociationManagement 只从父实体到子实体,而不是反过来。所以,它不是很有用。更好的 异曲同工.

enableLazyInitialization 可以对懒惰属性有用,如在 本文.

enableDirtyTracking 如果你确保持久化上下文永远不会加载太多实体,就不需要这个设置。你最好减少持久化上下文的大小,而不是使用这个设置。

在这里,你最好减少持久化上下文的大小,而不是使用这个设置。enableExtendedEnhancement 设置允许您扩展比实体类更多的功能,因此字节码增强甚至可以在调用实体上的getters和setters之外工作。不推荐使用此设置。

© www.soinside.com 2019 - 2024. All rights reserved.