作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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/
我正在编写一个 Web 应用程序,两个不同的用户可以在其中更新事物列表,例如待办事项列表。我已经意识到,乐观锁定机制效果最好,因为我不希望出现高争用情况。 我一直在查看事务隔离级别,现在我有点困惑。看
我是一名优秀的程序员,十分优秀!