[HIBERNATE][SPRING][WEB] Probleme de conccurence à l'update.
Bonjour,
Suite à un bug de stock chez un client, je me suis rendu compte que si ma mise à jour de stock est faite par 2 personnes ( donc 2 navigateur et poste differents ) , je me retrouve avec des chiffres completement abhérant.
Mon projet est en spring + hibernate et se base sur une sortie typique d'un site web avec du JSP.
Mon controller appelle un manager qui utilise bien un transaction manager
Code:
1 2 3 4 5 6 7 8
| <bean id="proxyService" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean> |
Dans mon service je fait plusieurs chose avant d'apeller la méthode de mon Dao qui me pause problème.
Code:
1 2 3 4 5 6 7 8 9 10
|
public Articles doUpdateOrInsertWithFlush(Articles dobjet, Integer add) {
this.getHibernateTemplate().flush();
this.getHibernateTemplate().refresh(dobjet);
dobjet.setStock_reel(dobjet.getStock_reel().intValue()+add.intValue());
this.getHibernateTemplate().saveOrUpdate(dobjet);
this.getHibernateTemplate().flush();
return dobjet;
} |
J'ai fait des 10 aines de possibilité , mais rien n'y change.
Pour le mapping.
Code:
1 2 3 4 5 6 7 8 9
|
<hibernate-mapping>
<class lazy="true" name="alce.beans.db.Articles" table="articles" dynamic-update="true">
<id name="art_id" type="int">
<generator class="native"/>
</id>
<property name="date_create"/>
<property name="stock_reel" type="java.lang.Integer"/>
</class> |
Donc concretement , lors du lancement il lui prend de récupérer la valeur qu'avait l'article pendant le traitement que fait l'autre utilisateur.
J'aimerais le forcer a se mettre a jour automatiquement, a chaque fois qu'il entre et sort de cette fonctionnalité.
Je serais infiniment reconnaissant a celui qui réussira a m'aider dans mon problème.