簡體   English   中英

JPA實體未保留在我的額外字段中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM