Quelle est la différence entre une session et une transaction dans JPA 2.0?
je viens de commencer mon JPA 2.0 études, et j'ai ce bout de code:
em = SessionFactory.startSession();
tx = em.getTransaction();
Mon problème est: je ne suis pas sûr si j'ai complètement comprendre la différence entre l'utilisation d'une session et l'utilisation d'une transaction. En quelques lignes, quelqu'un peut-il s'il vous plaît me dire les plus grandes différences entre eux ? Merci !
4 réponses
vous allez à la banque pour déposer 2 chèques, et retirer une petite somme.
vous faites la queue jusqu'à ce qu'un caissier ouvre.
vous faites votre premier dépôt. Puis ton second. Puis vous faites votre retrait.
maintenant que vous avez terminé, vous quittez la ligne de guichet.
atteindre le caissier, c'est comme créer votre session, maintenant vous êtes à la banque, prêt à travailler.
Chaque dépôt et de retrait sont leurs propres contenus de travail, ce sont vos transaction.
quand vous avez fini votre travail et que vous partez, vous fermez ou abandonnez votre session.
Donc essentiellement une session contient vos transactions, après tout vous ne pouvez pas faire un dépôt bancaire si vous ne allez jamais à la banque n'est-ce pas?
em = SessionFactory.startSession ();
dans JPA, il n'y a pas de Session et pas de Sitefactory. SessionFactory est une interface spécifique à l'hibernation que vous ne devriez pas utiliser si vous utilisez JPA (utilisez L'API D'Hibernate ou utilisez Hibernate comme fournisseur JPA, mais pas les deux.)
une session est ce que vous utilisez pour interagir avec la base de données.
une transaction est utilisée pour spécifier les limites dans lesquelles la session doit fonctionner.
essentiellement, les transactions empêchent la base de données d'être corrompue en permettant seulement à une session d'interagir avec elle à un moment donné. (C'est un peu plus compliqué alors que, comme vous pouvez avoir de nombreuses transactions de lecture à partir de la base de données, mais une seule transaction qui est écrit.)
dans Hibernate, la gestion des transactions est assez standard, rappelez-vous juste que toutes les exceptions lancées par Hibernate sont fatales, vous devez revenir en arrière sur la transaction et fermer la session en cours immédiatement.
voici un modèle de transaction D'hibernation:
Session session = null;
Transaction tx = null;
try{
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
tx.setTimeout(5);
//doSomething(session);
tx.commit();
}catch(RuntimeException e){
try{
tx.rollback();
}catch(RuntimeException rbe){
log.error("Couldn’t roll back transaction", rbe);
}
throw e;
}finally{
if(session!=null){
session.close();
}
}