我正在开发使用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
这种方法是在服务中还是在DAO(或存储库)中? –
@KimAragonEscobar,它位于存储库类中。存储库类在服务类中 –