我遇到了一个问题,我一次保存一个实体列表,有时某些行的值会写入错误的列。保存多个实体时弹簧JPA插入错误的列
基本上,我有一个电影实体,其延伸显示(与@MappedSuperclass
注解),该延伸TraceableEntity,其也标注了@MappedSuperclass
,如下所示:
@MappedSuperclass
@EntityListeners(TraceableEntity.TraceableEntityListener.class)
public abstract class TraceableEntity {
@Column
private Date createdOn;
@Column
private Date dateUpdated;
public Date getCreatedOn() {
return createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
public Date getDateUpdated() {
return dateUpdated;
}
public void setDateUpdated(Date dateUpdated) {
this.dateUpdated = dateUpdated;
}
public static class TraceableEntityListener {
@PrePersist
public void beforeInsert(TraceableEntity entity) {
if (entity.getCreatedOn() == null) {
entity.setCreatedOn(new Date());
}
}
@PreUpdate
public void beforeUpdate(TraceableEntity entity) {
entity.setDateUpdated(new Date());
}
}
}
现在,在有些场合,创建的的值在结束于dateUpdated,如此screenshot所示。
简而言之,我的应用程序是一个从API中检索数据的刮板。我在CompletableFuture
中使用RestTemplate
同时下载数据,然后一切保存。调用.save(...)
的方法用@Transactional
进行注释。当列表大小大约在1500以下时,节省是好的,但出于某种原因,当大小超过1500时似乎出现了问题。我真的很感谢你在这件事上的时间和帮助!
奇怪的是,如果我只刮掉'dateUpdated'中的'createdOn'的行(即截图中的最后4个条目),一切都很好......我不知道这里发生了什么。 –
假设你想要Spring的审计机制我认为使用Spring数据审计很容易。请参考这个[示例](http://www.baeldung.com/database-auditing-jpa) –