有谁知道为什么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不让你做同样的事情。
最佳答案
要使用锁定,您必须具有适当的事务边界。如果您没有它们,则锁将只对findByNameAndStreet
起作用。
但是,如果您从本身是事务性的服务方法中调用此方法,则锁将覆盖整个事务性服务方法。