有谁知道为什么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为什么不让你做同样的事情。
答案 0 :(得分:1)
要使用锁定,您必须具有适当的事务边界。如果你没有,那么锁定的唯一电话就是findByNameAndStreet
。
但是,如果您从一个本身是事务性的服务方法调用此方法,则锁将跨越整个事务服务方法。