我遇到了一个问题,即我一次保存了一个实体列表,有时某些行的值被写入错误的列。
基本上,我有一个电影实体,它扩展了显示(注释为@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());
}
}
}
现在,在某些情况下, createdOn 的值最终会出现在 dateUpdated 中,如此screenshot所示。
简而言之,我的应用程序是一个从API检索数据的scraper。我在RestTemplate
中使用CompletableFuture
同时下载数据,然后一次性保存所有内容。调用.save(...)
的方法使用@Transactional
进行注释。当列表的大小低于大约1500时,保存很好,当出于某种原因大小超过1500时,似乎出现问题。我非常感谢你在这件事上的时间和帮助!
答案 0 :(得分:0)
它总是发生在同一个地方吗?你错过了一些行吗?也许你正在抓的一些东西的文字有特殊字符没有正确转义?您可能希望打开日志记录以查看发送到服务器的确切内容。
如果你刮掉“有问题的”电影并且结果很好的原因可能是因为实际问题发生在有问题的电影之前。