Comment le Printemps @Transactionnelle et mise en veille prolongée @LockMode annotations liées
Je souhaite connaître la relation entre les transactions et des verrous.
Pour être plus précis, comment est le Printemps @Transactional
liées à Hibernate LockMode. https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html.
http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html
Si je n'ai pas préciser tout de verrouillage lors de la création de l'Objet Session, et l'utilisation @Transactional
avec readOnly
comme false
, suis-je Pessimiste à l'aide de Concurrenct de Contrôle.
Il serait d'une grande aide, si quelqu'un peut me dire le rapport entre (Optimiste/Pessimiste) Contrôle de concurrence et Transactions.
Merci,
Vivek
OriginalL'auteur vivek4348 | 2016-06-23
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de direct relation entre
@Transactional
et@LockMode
annotations.Comme expliqué dans ce post,
@Transcational
est utilisé pour marquer les limites explicites d'un RESOURCE_LOCAL ou transaction JTA. La raison pour laquelle vous avez besoin de lui, c'est parce que chaque instruction de base de données s'exécute dans un contexte transactionnel, et, si vous ne définissez pas les limites des transactions, vous obtiendrez une transaction par relevé ou auto-commit.D'autre part,
@LockMode
est pour la définition explicite des options de fermeture. Si vous ne définissez pas d'elle, de l'implicite des mécanismes de verrouillage:@Version
propriété, la implicite verrouillage optimiste mécanisme sera utilisé.Donc,
@LockMode
est pour le réglage des options de verrouillage explicitement, et vous pouvez avoir l'une des options suivantes:LockModeType.OPTIMISTE
LockModeType.OPTIMISTIC_FORCE_INCREMENT
LockModeType.PESSIMISTIC_FORCE_INCREMENT
LockModeType.PESSIMISTIC_READ
LockModeType.PESSIMISTIC_WRITE
La
PESSIMISTIC
modes de verrouillage toujours acquérir un verrou de base de données sur la ligne du tableau qui est associé avec le verrouillage de l'entité. LeOPTIMISTIC
modes de verrouillage sont conçus pour vous donner un moyen de gonfler une entité version, même si l'entité n'a pas changé dans le cours d'exécution le Contexte de Persistance. C'est un mécanisme très utile lorsque vous avez besoin de coordonner plusieurs enfants entités à l'aide de leur parent entité version.Il y a beaucoup d'exemples dans les liens que j'ai fournis dans la présente réponse, donc prenez votre temps, lisez-les tous, et vous l'aurez compris, tous ces concepts plus en détail.
OriginalL'auteur Vlad Mihalcea
Du printemps
@Transactional
et HibernateLockMode
classe sont différents.Printemps, La Gestion Des Transactions
@Transactional
est un Printemps annotation déclarative, la gestion des transactions, c'est à dire la définition de ce que SQL sont exécutées à l'intérieur d'une transaction de base de données. À l'aide de lareadOnly
attribut permet de Printemps pour lancer une exception si vous tentez d'insérer des lignes à l'intérieur d'une lecture seule transaction, par exemple.À l'égard de verrouillage, cependant, vous aurez plus de chances à l'aide d'une lecture/écriture (
readOnly = false
) de la transaction, parce que vous allez être de tenter de modifier les données.Le Verrouillage Pessimiste
De Hibernate
LockMode
est utilisé pour le verrouillage pessimiste, par exempleLockMode.UPGRADE
exécute unSELECT...FOR UPDATE
déclaration, et les verrous de la ligne dans la base de données correspondant à l'entité.Verrouillage Optimiste
Contrôle d'accès concurrentiel optimiste dans Hibernate utilise généralement une version ou à une colonne timestamp dans la base de données. L'idée ici est que si plusieurs transactions tentative de modifier une ligne simultanément, tous les mais la première transaction validée va détecter que le numéro de version a changé et effectuez une restauration.
Citations ci-dessus sont tirées de: https://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
@Transactional
est utilisé pour la gestion des transactions, et surtout, il est annoté sur la méthode de service. Par l'utilisation de@Transactional
, je peux gérer les transactions simultanées, alors pourquoi estLockMode
ou@Version
nécessaire. Pourriez-vous veuillez expliquer par des cas d'utilisation ou des exemples pour chacun.Utiliser le verrouillage pessimiste lorsque les collisions se produisent fréquemment. Utiliser le verrouillage optimiste lors de collisions ne sont pas censés se produire. Le verrouillage est nécessaire lorsque deux ou plusieurs transactions de base de données en modifiant la même ligne simultanément.
OriginalL'auteur ck1