为什么Spring不允许对读操作进行独占锁定?

时间:2017-08-16 08:28:28

标签: java spring spring-mvc spring-data spring-data-jpa

有谁知道为什么Spring不允许在读取操作中放置@ Lock(LockModeType.PESSIMISTIC_WRITE)?

@Lock(LockModeType.PESSIMISTIC_WRITE)
Human findByNameAndStreet(String name, String street);

为什么EntityManager本身允许你对读操作进行独占锁定?

entityManager.createQuery("select o from Human o where o.name= :name and o.street= :street", Human.class)
            .setLockMode(LockModeType.PESSIMISTIC_WRITE).setParameter("name", name).setParameter("street", street).getSingleResult();

底线,在Spring中的同一个选择查询中我不能把WRITE锁定,而且我可以使用EntityManager。我真的不知道Spring为什么不让你做同样的事情。

1 个答案:

答案 0 :(得分:1)

要使用锁定,您必须具有适当的事务边界。如果你没有,那么锁定的唯一电话就是findByNameAndStreet

但是,如果您从一个本身是事务性的服务方法调用此方法,则锁将跨越整个事务服务方法。