Disons que j'ai méthodes avec après la signatured'accès simultané (données périmées) dans JPA
Object getData(int id) {
//create a entity manager
//get data frm db
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager
//start transcation tx
//update
//commit tx
}
Maintenant, il va causer problème de concurrence? Les données peuvent-elles être périmées dans le pire des cas? Par exemple. si je getData
et au moment où je mets à jour, si quelqu'un met à jour les données mon updateData
aura des données périmées? Maintenant, puis-je utiliser ce qui suit: Vais-je résoudre le problème?
Object getData(int id,Entitymanager em) {
//get data frm db using em
//return data
}
updateData() {
Object obj = getData(id)
//get entity manager em
//start transcation tx
//getdata using getData(id,em)
//commit tx
}
Le verrouillage au niveau des lignes n'aidera pas ici: il extrait toutes les données en dehors d'une transaction. – GaryF
va obtenir des données et la mise à jour des données à l'intérieur même transcation va résoudre le problème? Plz voir ma nouvelle édition de l'article original – akp
Obtenir les données à l'intérieur de la transaction signifiera, avec verrouillage de ligne, une mise à jour concurrente d'attendre l'achèvement de la première mise à jour. Cependant, les deux fonctionneront toujours de sorte que votre bloc transactionnel doit veiller à ce qu'il n'écrase rien d'une autre transaction. – GaryF