我有一個實體,其中包含幾個基本字段A,B和C以及一個複雜字段X,它不是(不應該)映射到數據庫列。這個想法是在加載實例時從A,B和C創建X,並在持久時將X解構成A,B和C.JPA帶回調方法的瞬態字段
第一個順理成章的事情嘗試是這樣的:
@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中如何處理@Transient有關。 @Transient和@PrePersist不會混用。好。不能與我想的規格爭論。
但是,有什麼替代方案?我真的不需要數據庫中的X.
我能想出的最好的是:
@Column(insertable=false,updatable=false)
private X x;
它創建列X,這始終是零。如果它真的是唯一的方法,我可以忍受這一點,但它似乎充其量只是黑客。
我不能是唯一遇到這個問題的人。有沒有更好的方法來做到這一點?
當您調用合併時,@PreUpdate註釋將是調用的權利。 – JMelnik