将分离的JPA实体与@version字段合并

我有一个带有@Version字段的JPA实体类,用于乐观锁定。 我需要merge()一个分离的实体实例,该实例的版本字段在持久化上下文中的现有实体实例上未初始化。 在执行此操作时,托管实例的版本字段被覆盖,这会导致稍后出现OptimisticLockException。

我可以在合并之前手动将版本字段的内容从托管副本复制到分离的实体,但我觉得这有点尴尬。 有没有更好的选择或最佳做法来处理这种情况?


如果版本字段未初始化,则合并不起作用。 它必须在那里。 JPA提供程序必须将您尝试合并的实体的版本字段与数据库中的版本进行比较。 如果实体版本比数据库中的要旧,那么它将不得不抛出异常。

你可以做的,而不是做一个合并,是通过JPA查询使用更新:

Query q = em.createQuery("UPDATE MyEntity me SET me.versionField = me.versionField + 1....");
q.executeUpdate();

您可以在此查询中设置实体的其他字段,但重要的是您必须显式增加版本字段的值。 版本字段在通过查询进行更新时不会自动递增。

链接地址: http://www.djcxy.com/p/89599.html

上一篇: Merge detached JPA entity with @version field

下一篇: adding association links to spring data rest custom exposed method