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);
我想使用額外的字符串列作爲額外的對象。 所以我做了@PostLoad,@PrePersist回調,它們正在轉換額外的列。 但是,當我堅持數據對象時,狀態值是持久的,但額外的列(Data._extra)不會持久。我做錯了什麼?JPA實體沒有持續我的額外字段
爲什麼不在Extra映射上使用轉換器而不是使其成爲瞬態?轉換器會將其轉換爲字符串/從字符串轉換,而不是依賴preLoad和prePersist方法,並允許您刪除_extra字段。請參閱http://docs.oracle.com/javaee/7/api/javax/persistence/Convert.html – Chris
目前,我正在使用轉換器。現在我只是想知道爲什麼額外的列不會持久。 – chaeyk