如何禁用JPA的锁定系统?

我正在使用OpenJPA,我遇到了锁定问题。 我已经了解了什么是OptimisticLockException以及什么时候抛出它。

但我该如何处理呢?

在*下面,您可以找到关于乐观锁定exception的小段落。

简而言之,我如何完全禁用锁管理器?

在我的persistent.xml中,我有以下xml代码,但它不起作用。 为什么?

...    ... 

*根据关于Java Persistent的wikibooks:

处理乐观锁定exception

不幸的是,程序员经常会因为自己的利益而过于聪明。 使用乐观锁定时出现的第一个问题是当发生OptimisticLockException时要执行的操作。 友好邻居超级程序员的典型反应是自动处理exception。 他们将只创建一个新事务,刷新对象以重置其版本,并将数据合并回对象并重新提交。 Presto问题解决了,或者是吗?

这实际上首先打破了整个锁定点。 如果这是你想要的,你也可以不使用锁定 。 不幸的是,很少会自动处理OptimisticLockException,你真的需要打扰用户这个问题。 您应该向用户报告冲突,并且说“您的抱歉但发生编辑冲突并且他们将不得不重做他们的工作”,或者在最好的情况下,刷新对象并向用户显示当前数据和他们提交的数据并帮助他们合并两者。

一些自动合并工具将比较数据的两个冲突版本,如果没有单个字段冲突,那么数据将在没有用户帮助的情况下自动合并。 这是大多数软件版本控制系统所做的。 不幸的是,用户通常能够更好地决定何时出现冲突而不是程序,只是因为.java文件的两个版本没有改变相同的代码行并不意味着没有冲突,第一个用户可能已经删除了另一个用户添加了一个引用方法的方法,以及导致典型的每晚构建经常中断的几个其他可能的问题。

但我该如何处理呢?

这取决于你的应用……你需要做最有意义的事情。 也许您需要提示您的用户数据被同时修改,然后重新提交新的(呃)数据?

虽然我不认为禁用OptimisticLocking是正确的解决方案,但我认为设置这两个属性将摆脱您所看到的OLE。