【问题标题】:What are the values and their differences for eclipselink.weaving property?eclipselink.weaving 属性的值和区别是什么?
【发布时间】:2022-01-03 16:26:58
【问题描述】:

eclipselink.weaving 属性存在哪些值,它们的含义是什么?

在Spring中我们可以使用Java配置或者XML配置来创建entityManager,下面的例子是针对XML的:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaProperties">
        <props>
            <prop key="eclipselink.weaving">false</prop>
            ...
        </props>
    </property>
   ...
</bean>

我们有以下选择:

  • static - 静态编织以在构建时编织所有适用的类文件,以便您可以交付预编织的类文件。

false 是什么意思?我们可以将哪些选项传递给eclipselink.weaving 属性?

编辑: 我想在编译时配置编织。我正在使用这个 Maven 插件

<groupId>com.ethlo.persistence.tools</groupId>
<artifactId>eclipselink-maven-plugin</artifactId>

我应该使用falsestatic 什么值?

【问题讨论】:

    标签: spring jpa eclipselink entitymanager compile-time-weaving


    【解决方案1】:

    eclipselink.weaving 属性状态 3 值的 Javadoc:

    • "true" - 要求编织完成。如果会抛出异常 实体不是编织的
    • "false" - 强制不进行编织
    • "static" - 要求使用静态编织实用程序进行编织 实体

    True aka Dynamic 意味着有一个代理将在 JVM 中编织实体。请参阅doc 在容器外部进行设置。 Static 告诉 EclipseLink 您已经在类加载器中的 java 类上完成了自己的编织(请参阅wiki 了解如何设置它),而 false 关闭任何需要编织类的选项(更改跟踪,一对一懒惰)等等)。

    【讨论】:

    • 那么如果我把false 编织没有完成,那到底是什么意思呢?该应用程序不会使用编织?或者它是否在构建期间完成?在构建期间配置编织时我应该使用static吗?
    • false 只是告诉 EclipseLink 编织没有事先完成并且没有代理,所以它不能完成 - 这可以防止 EclipseLink 尝试访问不去的实体上的接口和其他方法到那里。其他两个值都告诉 eclipseLink 这些类已被编织 - 如果您希望 EclipseLink 在实体类上使用这些接口,请使用静态,并且您已经在它们上使用了静态编织(或自己添加它们)。 true 的值告诉代理在类加载器首次加载类时编织类。
    猜你喜欢
    • 2019-06-20
    • 2011-11-14
    • 2016-04-29
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多