【发布时间】:2019-02-25 16:27:06
【问题描述】:
我对 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)。谁能解释这些行为?
我阻止了这种行为并将@PostLoad 注释方法中的所有@Transient 字段设置为null。
@Entity
@Cacheable(true)
@Cache(expiry = 300000)
@Table(uniqueConstraints=@UniqueConstraint(name = "uc_b_a_v", columnNames = {"a_id", "v"}))
public class Entity {
@Transient
private String transientfield;
@PostLoad
public void onPostLoad() {
transientfield = null;
}
}
【问题讨论】:
-
PostLoad 仅在从数据库加载实体时调用。如果实体来自当前缓存,则按原样返回。
标签: java jpa eclipselink