您 真的 需要使用DTO吗?如果要传递实际的实体,就不会有这个问题-也不必再次加载该实体,这对性能而言并不是很好。
但是,即使您确实有使用DTO的正当理由,我也不太了解为什么要在保存之前尝试在 新近重新加载的 实体上更新版本号。考虑工作流中可能的不同方案:
- 实体最初已加载,版本为V1
- 它已传输到DTO,该DTO进入UI,返回并准备保存。
- 实体再次加载,版本为V2
您现在有两种可能性:
- V1 == V2。Peachy,您无需执行任何操作。
- V1小于V2,这意味着您在编辑实体时实体是由其他人更新的。没有必要尝试将版本设置为V1并尝试保存,因为保存会失败。您可以使用V2保存它(从而覆盖其他人的更改),也可以立即失败(不涉及Hibernate)。



