JPA et optimiste modes de verrouillage

J'ai lu un article sur le blog de l'Oracle ici sur JPA et de verrouillage de modes.

Je ne suis pas tout à fait comprendre la différence entre OPTIMISTIC et OPTIMISTIC_FORCE_INCREMENT le mode de verrouillage des types.

OPTIMISTIC mode :

JPA et optimiste modes de verrouillage

Lorsqu'un utilisateur verrouille une entité avec ce mode, une vérification est effectuée sur le champ version de l'entité (@version) au début de la transaction, et une vérification sur le champ version est également fait à la fin de la transaction. Si les versions sont différentes, la transaction est annulée.

OPTIMISTIC_FORCE_INCREMENT mode :

JPA et optimiste modes de verrouillage

Lorsqu'un utilisateur choisit ce mode, il a flush() l'état de l'EntityManager dans la base de données pour incrémenter le champ version manuellement. Ainsi, tous les autres optimiste transactions seront invalidés (roll back). De vérifier la version est également fait à la fin de l'opération de valider ou d'annuler la transaction.

Il semble clair, mais quand dois-je utiliser OPTIMISTIC contre OPTIMISTIC_FORCE_INCREMENT modes ? Le seul critère que je vois, c'est pour appliquer OPTIMISTIC_FORCE_INCREMENT mode quand je veux la transaction ont la préséance sur les autres parce que le choix de ce mode de faire reculer toutes les autres transactions en cours d'exécution (si je comprends bien les mécanismes).

Est là une autre raison de choisir ce mode, plutôt que OPTIMISTIC mode?

Grâce

  • Je pense que nous utilisons utilisation OPTIMISTIC_FORCE_INCREMENT en cas de mise à jour de l'entité qui contient un autre type d'entités sur le terrain (@oneToOne, @oneToMany). Nous avons donc serrure avec OPTIMISTIC_FORCE_INCREMENT par exemple tous les ListItem lorsque l'on veut mettre à jour la Liste. Ainsi, au moment de la validation, nous nous assurons que toutes les entités liée à l'entité que nous voulons mettre à jour sont inchangés. N'est-ce pas ?
InformationsquelleAutor Olivier J. | 2012-11-27