Hibernation et transactions et verrouillage de table
Si j'ai un code qui ressemble à ceci:
beginTransaction();
//lots of stuff happens, can take anywhere from a minute to several minutes.
//it will read from several tables via calling getter methods on lazy relationships.
commitTransaction();
Entre le begin et commit sont les tables qui sont en cours de lecture d'être enfermé et par la suite ce que cela pose problème dans un environnement multi-utilisateur, où des problèmes se produisent lorsque le même code ci-dessus est appelé par un autre utilisateur?
Si ce qui précède est problématique, devrait nous essayons toujours de garder les transactions à court terme? et pour faciliter cette opération, au lieu d'appeler des méthodes de lecture sur paresseux relations, est-ce à dire de son mieux pour garder les transactions à court et ne trouve manuellement pour les enfants des parents?
source d'informationauteur digiarnie
Vous devez vous connecter pour publier un commentaire.
Hibernate ne va pas à quoi que ce soit explicitement lock tables vous lire. La réponse dépend vraiment de la Base de données que vous utilisez et ce que vos niveaux d'isolation sont définis. Le verrouillage d'un ensemble de table par la lecture des lignes ne devrait pas se produire dans toute complet de la base de données écrites dans ce siècle. Pour toute multiversioning base de données, rien ne va se verrouillé, sauf si vous explicitement verrouiller la ligne vous-même.
Vos transactions doivent être n'importe quelle longueur ils ont besoin pour être à votre unité atomique de travail. Il n'y a pas de bonne ou de mauvaise longueur. Demandez-vous "tout ce qui se passe ici, de réussir ou d'échouer comme une seule unité et tous s'rolledback ensemble si une pièce tombe en panne?" C'est le champ que vous définissez une transaction.
Rappelez-vous, vous n'avez pas besoin d'une opération pour avoir un chargement différé! Vous avez juste besoin d'une Session ouverte. Les deux ne sont pas liés. Vous pouvez valider votre transaction et de garder votre session ouverte à garder le chargement paresseux de travail.
La meilleure chose est de garder les transactions courtes. Le verrouillage de la sémantique dépend des niveaux d'isolation des transactions.
Open Session In View est le modèle que vous cherchez quand vous parlez de paresseux-chargement/relations.