【发布时间】:2015-05-28 22:19:48
【问题描述】:
我使用 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。
我确定两个线程都执行 select for update(数据库日志中有 2 条这样的记录)。
【问题讨论】:
标签: java spring hibernate postgresql jpa