【发布时间】:2016-11-16 14:20:08
【问题描述】:
我正在使用 Spring MVC 开发 webapp,并在我的应用程序中有这样的方法:
@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)。 -
这些方法是在服务中还是在 DAO(或存储库)中?
-
@KimAragonEscobar ,它在存储库类中。并且存储库类在服务类中
标签: java spring hibernate transactions race-condition