我对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
答案 0 :(得分:0)
eclipselink论坛上的这篇帖子很好地解释了这种行为:https://www.eclipse.org/forums/index.php/t/206082/
EclipseLink默认情况下启用共享缓存。此共享缓存可以 是否支持维护瞬态变量。
如果使用编织,则将共享的缓存对象克隆到持久性上下文中或从持久性上下文克隆,从而保留了临时变量的状态。
如果不使用编织,则会在 持久性上下文,并且非临时状态(仅)是从 共享对象。
因此,如果您不想缓存瞬变,则可以禁用内部 编织(“ eclipselink.weaving.internal” =“ false”),这仍然会 允许编织LAZY和更改跟踪。
您还可以禁用共享缓存,或完全禁用编织, 或配置实体的CopyPolicy,或使用DescriptorEvent postClone / postMerge。