我有一个多对多的关系,其中链接表有一个附加属性。因此,链接表也由实体类表示并称为Composition
。的主键Composition
是@Embeddable
到相应实体的链接,例如。2个@ManyToOne
参考。
用户在选择两个引用中的任何一个时可能会出错,因此必须更新复合主键。然而,由于 JPA(休眠)的工作方式,这当然总是会创建一个新行(插入)而不是更新,并且旧行Composition
仍然存在。最终结果是添加了一个新行,而不是更新了一个。
选项1:
旧的Composition
可以在插入新的之前删除,但这需要相应的处理方法需要旧版本和新版本。另外,由于更新版本实际上是一个新实体,乐观锁定将不起作用,因此最后一次更新将始终获胜。
选项 2:
本机查询。该查询还会增加版本列并在 WHERE 子句中包含版本。OptimisticLockException
如果更新计数为 0(并发修改或删除)则抛出
什么是更好的选择?这个问题的“共同方法”是什么?