![](/img/trans.png)
[英]How to use or annotate a dummy field in a JPA entity bean which is not supposed to be persisted in database
[英]JPA entity is not persisted with my extra field
class Extra {
int a;
}
@Entity
@Table(name = "data_table")
@Data
class Data {
@Column int state;
@Column(name = "extra") String _extra;
@Transient Extra extra;
@PostLoad
void preLoad() {
extra = mapper.readValue(_extra, Extra.class);
}
@PrePersist
@PreUpdate
void prePersist() {
_extra = mapper.writeValueAsString(extra);
}
}
Data data = jpaRepository.findOne(...);
data.setState(1);
data.getExtra().setA(1);
jpaRepository.save(data);
我想使用額外的字符串列作為Extra對象。 因此,我進行了@PostLoad和@PrePersist回調,它們將轉換多余的列。 但是,當我保留數據對象時,狀態值將保留,但多余的列(Data._extra)不會保留。 我做錯了什么?
您定義的額外對象是@Transient
。 臨時對象不會保存到數據庫。
如果您真的想詢問extra.a,那么@Abdullah G的答案是否正確。
但是,如果您輸入錯誤,則可能是_extra
字段。
Hibernate緩存剛剛保留的值,因此您在@PreUpdate回調中獲取了一個緩存的舊對象。
更新我找到的解決方案是使用
@Column(name = "password", insertable = false, updatable = false)
而不是@Transient
注釋。 但是,它將在數據庫中創建一列,該列始終為空。
您的保存方法-是否使用合並? 由於Extra是暫時的,因此它對於JPA是不可見的,並且不會合並到托管實例中。 因此,當調用preUpdate方法時,它將為null。 如果需要,您必須編寫自己的save方法以合並臨時值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.