gpt4 book ai didi

java - 保存然后更新 Spring Data 中的实体

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:18 25 4
gpt4 key购买 nike

我正在尝试对 Spring Data 应用程序中的数据导入进度进行建模,但无法解决 Hibernate StaleStateException 的问题。大概是因为一旦保存了原始的 Progress 实体(Id 是自动生成的 UUID),它就会分离。

因为 Spring 负责幕后的所有事务/ session 逻辑,所以我发现很难掌握实际发生的情况。

例如,我想做这样的事情:

Progress progress = new Progress();
progress.setStartTime(new Date());

int recordsProcessed = 0;
while(!importFinished) {
// import ten records
recordsProcessed += 10;

progress.setRecordsProcessed(recordsprocessed);
progressRepository.save(progress);
}

progress.setEndTime(new Date());
progressRepository.save(progress);

ProgressRepository 扩展 CrudRepository/JpaRepository

这样,如果导入在任何阶段失败,我都会在数据库中记录失败的导入,并且我还可以批量保存,这样整个导入就不会回滚并需要重新运行。

关于这在 Spring Data 中是否可行有什么想法吗?

预先感谢您的任何建议。

最佳答案

事实证明,问题的根源在于使用 UUID 作为 ID。我的 ID 类的相关部分是:

@MappedSuperclass
public class AbstractEntity {
@Id @GeneratedValue(generator="uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
protected UUID uuid;
}

一旦我用普通的 Long 自动增量替换 UUID,一切就正常了。

非常痛苦的错误 - 我特别想到 MySQL 以及它如何处理存储 UUID (BINARY(255)) - 所以希望这可以节省其他人很多时间!

或者任何人对此有更深入的了解,请分享。

关于java - 保存然后更新 Spring Data 中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35177769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com