加载后瞬态字段不为null

时间:2019-02-25 16:27:06

标签: java jpa eclipselink

我对eclipselink 2.5.2的令人惊讶的行为感到困惑。在相同情况下,实体的瞬态字段将在加载对象后设置为最后一个值。从我的角度来看,没有定义加载后瞬态字段的状态应如何定义(请参见https://download.oracle.com/otn-pub/jcp/persistence-2.0-fr-oth-JSpec/persistence-2_0-final-spec.pdf?AuthParam=1551111289_d4f5a797aa325dac1adb64fb8b75c2af)。谁能解释这些行为? 我防止了这种行为,并将带注释的backend方法中的所有@Transient字段都设置为null。

@PostLoad

1 个答案:

答案 0 :(得分:0)

eclipselink论坛上的这篇帖子很好地解释了这种行为:https://www.eclipse.org/forums/index.php/t/206082/

  

EclipseLink默认情况下启用共享缓存。此共享缓存可以   是否支持维护瞬态变量。

     

如果使用编织,则将共享的缓存对象克隆到持久性上下文中或从持久性上下文克隆,从而保留了临时变量的状态。

     

如果不使用编织,则会在   持久性上下文,并且非临时状态(仅)是从   共享对象。

     

因此,如果您不想缓存瞬变,则可以禁用内部   编织(“ eclipselink.weaving.internal” =“ false”),这仍然会   允许编织LAZY和更改跟踪。

     

您还可以禁用共享缓存,或完全禁用编织,   或配置实体的CopyPolicy,或使用DescriptorEvent   postClone / postMerge。