实体需要什么状态才能触发 [update] 操作?



版本: 1.1.2.RELEASE

我有以下简单的测试代码

JobTask task1 = new JobTask(null, "task1", "sync files", JobStatus.RUNNING);
JobTask savedTask = jobTaskReponsitory.save(task1);
savedTask.setTaskDesc("update descript.");
jobTaskReponsitory.save(savedTask);

JobTask 聚合根目录包含@Id@Version@CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate注释。

  1. 为什么总是触发InsertRoot操作?在第二个save()操作中,实体已经具有ID值,我了解此时应该触发update()操作。
  2. 是否有关于@Version的文档?我没有找到任何官方的东西。

第一个问题的答案就在第二个。

乐观锁定/Spring Data JDBC尚不支持@Version属性。这就是为什么没有关于它的官方文档。不过有一个公关请求。

这也意味着版本属性将保持不变null0,具体取决于其类型。 但将对其进行检查以确定实体是否被视为新实体: 如果 IDnull0,或者存在用@Version注释的属性,则该属性null0,则实体被视为新实体。

由于第二个条件始终保持true在您的情况下 Spring 数据 JDBC 将始终执行insert

为了解决这个问题,我建议暂时删除版本属性或至少@Version注释,因为它可能没有价值,因为无论如何都没有实现乐观锁定。

最新更新