gpt4 book ai didi

java - 悲观锁定因 ObjectOptimisticLockingFailureException 而失败

转载 作者:行者123 更新时间:2023-11-29 13:27:46 27 4
gpt4 key购买 nike

我使用 Spring Data JPA 和 Hibernate 作为 PostgreSQL 上的持久化提供者。我正在尝试提供悲观锁定:

public interface MediaRepository extends JpaRepository<Media, Long>, MediaRepositoryCustom {
Long countByCreatedBy(User creator);

@Query("select m from Media m where m.id = ?1")
@Lock(LockModeType.PESSIMISTIC_WRITE)
Media findOneAndLock(Long id);
}

我尝试从 2 个线程调用 findOneAndLock。我希望如果 Thread A 锁定对象,Thread B 应该等到锁被释放。但是 Thread B 抛出 org.springframework.orm.ObjectOptimisticLockingFailureException

我确定两个线程都执行选择更新(数据库日志中有 2 条这样的记录)。

最佳答案

默认行为是不等待。您需要在 persistence.xml

中指定等待时间
<properties>
<property name="javax.persistence.lock.timeout" value="1000"/>
</properties>

关于java - 悲观锁定因 ObjectOptimisticLockingFailureException 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com