- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在尝试锁定事务服务 (grails 2.3.8) 中的域对象时收到 StaleObjectStateException:
@Transactional
class AnalyticsService {
boolean newStreamView(Long streamId) {
Stream stream = Stream.lock(streamId) // The exception is launched here
当然,只有当有许多并发调用此服务时才会发生这种情况。如我所见,hibernate 正在尝试使用 ID 和版本参数进行锁定:
select id from stream where id =442 and version =305 for update
这失败了。如果我在该域类中禁用乐观锁定(版本:false),一切正常(hibernate 仅使用 id 来锁定行)。
发布于 Marc Palmer's Blog似乎是:
The only foolproof way to avoid StaleObjectException(s) while keeping optimistic locking ON, is to do all GORM work in transactions, and always load objects with Domain.lock(id). When using dynamic finders or criteria you will need to specify the “lock” option to have results pre-locked
他说我们应该保持乐观锁定。
是否有任何安全的方法来避免带有锁和乐观锁定的 StaleObjectStateException?
如果我禁用乐观锁定(版本:false),我还会遇到什么其他问题。我很担心这个,因为这个域类是从其他服务更新的?
提前致谢。
最佳答案
我们通过以下方式修复了 100% 的 StaleStateException/OptimisticLocking 问题:
关于java - lock() 方法中的 Grails StaleObjectStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301785/
我最近在尝试将子对象添加到父对象的列表时遇到了一些并发修改错误。 根据我所读到的内容,添加子对象会增加父对象的版本号,因此如果另一个线程正在执行我的创建方法,它会提示。 很公平。 我返回并尝试锁定域对
我在 Java J2EE Web 应用程序中使用 Hibernate 3.5.2 和 Spring Core 3.0.1。当不同的用户同时更新同一记录时,我收到 StaleObjectStateExc
在我的 Spring Boot Web 应用程序中,我有一个 Controller ,它提供了一种从数据库中删除实体的方法,该方法又调用 DAO 类。但是,当我调用 entityManager.rem
我已经为 StaleObjectStateException 苦苦挣扎了一个多星期,并决定在这里发布一个重现该问题的简单应用。 我了解 org.hibernate.StaleObjectStateEx
我们将 Hibernate 3.6.0.Final 与 JPA 2 和 Spring 3.0.5 结合使用,用于在 tomcat 7 和 MySQL 5.5 上运行的大型企业应用程序。应用程序中的大多
我应该在 ASP.NET MVC 应用程序的相应 Controller 中使用 try-catch block (旨在捕获/处理 StaleObjectStateException)包装对存储库的调用
有人可以指出错误吗? 注意:这是从我的真实应用程序中提取的简化测试用例。因此 3 个实体管理器的奇怪用法和em1.getTransaction().begin();em1.clear();em1.cl
当我尝试提交我的 session 时,另一个用户也更改了同一个对象,然后 Hibernate 抛出一个 StaleObjectStateException . 当我尝试从该异常中恢复时,我调用: se
我们将 Hibernate 3.6.3.Final 和 MySQL 5.5.8 用于 Web 应用程序。后端在 JBoss 6.0.0 Final 服务器上运行。大多数时候一切都很好,但偶尔我们会收到
我在使用 hibernate 的基于 Spring 框架的 Web 应用程序的 Controller 中遇到此异常。我尝试了很多方法来解决这个问题,但无法解决。 在 Controller 的方法 ha
我们试图在抛出 StaleObjectStateException 后合并对象以保存合并的副本。 这是我们的环境状况: 列表项 多用户系统 WPF 桌面应用程序、SQL Server 2008 数据库
当我的应用程序中出现乐观并发问题时,我的应用程序中会抛出 StaleObjectStateException 而不是 OptimisticLockException (正如我所读到的,我应该期待这个)
-更新: 事实证明,我们根本无法更新任何域对象。我们创建了非常简单的域/服务/ Controller 组合,但仍然出现StaleObjectStateException:行已由另一个事务更新或删除(或
当我尝试创建四个客户时,有代码。1.将Customer1,2写入数据库2. 合并Customer3(具有相同的id,例如1)3.合并Customer4(再次具有相同的id)我想创建同一实体的任何版本
我有一种情况,一个线程可以从数据库检索一个对象,并编辑它,当刷新它时,我得到一个 StaleObjectStateException 因为与此同时另一个线程编辑了同一个对象(我正在使用乐观锁定)。我可
在我的代码中,我通过 Hibernate 从数据库获取一个对象,更改一个字段并提交更改 session = HibernateUtil.beginTransaction(); Song
在哪里可以找到有关在基于版本的乐观锁定保存操作中捕获哪些异常的信息。 “互联网”上的文本表明 Hibernate 自己的或 JPA 的 OptimisticLockingException 中的任何一
我正在尝试将数据从一个数据库复制到另一个数据库。一切正常,直到源数据库中的一行被修改(下面的堆栈跟踪)。向目标数据库添加新行按预期工作。 我有一个包含以下 bean 的每个数据库连接(mysql 和
我有一个 Spring Controller 方法的问题。它实际上对同一实体进行了两次更新,这会导致 StaleObjectStateException 。 问题是,当我检索 Member 实例时,我
我有以下代码 studentInstance.addToAttempts(studentQuizInstance) studentInstance.merge() studentInstance.sa
我是一名优秀的程序员,十分优秀!