Je développe webapp avec Spring MVC et ont de telles méthodes dans mon application:condition de course entre les transactions
@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);
}
Ces deux méthodes sont souvent appelées presque en même temps, et à cause de cette condition de course se produit . Y a-t-il un moyen de résoudre ce problème? Je pense que mettre les deux dans une méthode synchronisée ne serait pas une bonne idée, parce que je m'attends à beaucoup d'appels de ces méthodes (des milliers) par différents utilisateurs en même temps, donc cela peut causer des retards. Fixe-moi si j'ai tort.
Pour ce que ça vaut, votre requête complexe et coûteuse est juste 'entityManager.find (Fruit.class, id)'. – chrylis
ces méthodes sont dans le service ou dans le DAO (ou référentiel)? –
@KimAragonEscobar, il est à l'intérieur de la classe du référentiel. Et la classe de référentiel est dans la classe de service –