版本: 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
注释。
- 为什么总是触发
InsertRoot
操作?在第二个save()
操作中,实体已经具有ID
值,我了解此时应该触发update()
操作。 - 是否有关于
@Version
的文档?我没有找到任何官方的东西。
第一个问题的答案就在第二个。
乐观锁定/Spring Data JDBC尚不支持@Version
属性。这就是为什么没有关于它的官方文档。不过有一个公关请求。
这也意味着版本属性将保持不变null
或0
,具体取决于其类型。 但将对其进行检查以确定实体是否被视为新实体: 如果 IDnull
或0
,或者存在用@Version
注释的属性,则该属性null
或0
,则实体被视为新实体。
由于第二个条件始终保持true
在您的情况下 Spring 数据 JDBC 将始终执行insert
。
为了解决这个问题,我建议暂时删除版本属性或至少@Version
注释,因为它可能没有价值,因为无论如何都没有实现乐观锁定。