我有一个实体,它包含几个基本字段 A、B 和 C 以及一个复杂字段 X,它不(不应该)映射到数据库列。这个想法是在加载实例时从 A、B 和 C 创建 X,并在持久化时将 X 解构为 A、B 和 C。
尝试的第一个合乎逻辑的事情是:
@Entity
class Xxx
{
private String a;
@Transient
private X x;
@PrePersist
public void prePersist()
{
XParts xp = x.deconstruct();
a = xp.getA();
//...
}
//...
}
问题是,当调用 entityManager.merge(xxx); x 丢失。与在 JPA 中如何处理 @Transients 有关。@Transient 和 @PrePersist 不要混用。好的。无法与我猜的规范争论。
但是,有什么替代方案?我真的不需要数据库中的 X 。
我能想到的最好的是:
@Column(insertable=false,updatable=false)
private X x;
它创建了 X 列,该列始终为空。如果这真的是唯一的方法,我可以忍受,但它似乎充其量是骇人听闻的。
我不能是唯一遇到这个问题的人。有没有更好的方法来做到这一点?