![](/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.