我正在使用Spring MVC开发Web应用程序,我的应用程序中有以下这些方法:
@Transactional
public void methodA(Long id, String color) {
Fruit fruit = entityManager.createNamedQuery("Fruit.findById", Fruit.class).setParameter(1, id).getSingleResult();
fruit.setColor("color");
entityManager.merge(fruit);
}
@Transactional
public void methodB(Long id, int price) {
Fruit fruit = entityManager.createNamedQuery("Fruit.findById", Fruit.class).setParameter(1, id).getSingleResult();
fruit.setPrice(price);
entityManager.merge(fruit);
}
这两种方法通常同时被调用,这导致了竞态条件。有没有办法解决这个问题?我认为把它们都放在一个同步的方法中并不是一个好主意,因为我预计这些方法会被许多不同用户同时调用(数千次),所以可能会导致延迟。如果我错了,请纠正我。
entityManager.find(Fruit.class, id)
。 - chrylis -cautiouslyoptimistic-