我该如何实现与以下代码等效的功能:
tx.begin();
Widget w = em.find(Widget.class, 1L, LockModeType.PESSIMISTIC_WRITE);
w.decrementBy(4);
em.flush();
tx.commit();
...但是使用Spring和Spring-Data-JPA批注?
我现有代码的基础是:
@Service
@Transactional(readOnly = true)
public class WidgetServiceImpl implements WidgetService
{
/** The spring-data widget repository which extends CrudRepository. */
@Autowired
private WidgetRepository repo;
@Transactional(readOnly = false)
public void updateWidgetStock(Long id, int count)
{
Widget w = this.repo.findOne(id);
w.decrementBy(4);
this.repo.save(w);
}
}
但是我不知道如何指定updateWidgetStock()方法中的所有操作都应使用悲观锁集。
Spring Data JPA批注updateWidgetStock()可让您设置LockModeType.PESSIMISTIC_WRITE,但我不知道将其放在updateWidgetStock方法上是否有效。 听起来更像是WidgetRepository上的注释,因为Javadoc说:
org.springframework.data.jpa.repository
@Target(值=方法)
@Retention(值=运行时间)
@记录
公共@接口锁
用于指定执行查询时要使用的LockModeType的注释。 当在查询方法上使用Query或从方法名称派生查询时,将对它进行评估。
...因此似乎无济于事。
如何使我的updateWidgetStock()方法与LockModeType.PESSIMISTIC_WRITE集一起执行?