首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring-data-JDBC Save ( update )不更新

Spring-data-JDBC Save ( update )不更新
EN

Stack Overflow用户
提问于 2021-11-10 06:26:09
回答 1查看 389关注 0票数 0

我有一个Spring应用程序,其中域对象标识符不是由数据库分配的,而是由应用程序生成的。标识符是在BeforeSave回调期间生成并添加到域对象中的。保存域对象(Insert)后,尝试使用相同标识符(更新)保存域对象时,将收到以下错误

原因: org.springframework.dao.IncorrectUpdateSemanticsDataAccessException:未能更新实体com.example.UUIDTest.DomainObjectLongId@77ccded4.在数据库中找不到Id 2997744842191684912。

我已经创建了几个测试示例。在DomainObject示例中,我以UUID的形式生成ID。在DomainObjectLongId示例中,我将ID作为一个Long生成。在这两个示例中,当使用Spring存储库时,它都会在保存(Update)上失败。手动生成SQL并使用它成功地进行更新。

我已经创建了一个让DB自动生成ID的测试示例。在这种情况下,在保存(Update)时,它会成功,不会出现任何错误。

如何让使用提供的id更新域对象?

下面是包含所有3个测试类的Github存储库。其中两个已提供标识符的保存(更新)失败,一个使用自动生成的标识符成功保存(更新)。

Github Spring-数据-JDBC-UUID-测试

EN

回答 1

Stack Overflow用户

发布于 2021-11-10 16:10:32

终于弄明白了。我总是更改DomainObject的ID

代码语言:javascript
复制
aggregate.setId(UUID.randomUUID());
return aggregate;

我需要检查它是否需要设置

代码语言:javascript
复制
if (aggregate.getId() == null) {
  aggregate.setId(UUID.randomUUID());
}
return aggregate;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69908728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档