いくつかの基本フィールド A、B、および C と、データベース列にマップされていない (すべきではない) 1 つの複雑なフィールド 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); を呼び出すときです。×は失われました。@Transients が JPA で処理される方法と関係があります。@Transient と @PrePersist は混在しません。Ok。私が推測する仕様と議論することはできません。
しかし、代替手段は何ですか?データベースに X は本当に必要ありません。
私が思いつくことができる最高のものは次のとおりです。
@Column(insertable=false,updatable=false)
private X x;
これにより、常に null である列 X が作成されます。それが本当に唯一の方法なら、私はそれを受け入れることができますが、それはせいぜいハックのようです.
この問題に遭遇したのは私だけではありません。これを行うより良い方法はありますか?