-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Session, Transaction, Unit of Work? (Anfängerfrage...)
PostPosted: Thu Oct 22, 2009 4:46 am 
Newbie

Joined: Mon Oct 12, 2009 10:32 am
Posts: 5
Hallo,

mir ist dieser "Unit of Work" nicht ganz klar. Das Ziel einer Anwendung ist ja, nicht bei jedem Save ne komplett neue Datenbankverbindung oder ne neue Session aufzubauen. Bei meiner Anwendung weiß ich jedoch nicht, wann ich eine Session öffnen muss, wann die Transaction, wann das commit() und wann die Session wieder geschlossen werden muss. Hier (https://www.hibernate.org/42.html) ist das ziemlich kompliziert erklärt.

Hier mal mein Code:
Code:
Configuration config = new Configuration.configure();
SessionFactory sessionFactory = config.buildSessionFactory();

//Jetzt kommen viele kleine Abfragen, die nichts an der DB ändern (read-only)
//Ein Abfrage-Block sieht so aus:
final Session session = sessionFactory.openSession();
Query q = session.createQuery("from Test where name = ?");
q.setString(0, name);
Test test = (Test) q.uniqueResult();
session.close();


Ist das so guter Stil? oder sollte man lieber mit dem hier arbeiten:
Code:
factory.getCurrentSession().beginTransaction();
// Do some work
factory.getCurrentSession().load(...);
factory.getCurrentSession().persist(...);
factory.getCurrentSession().getTransaction().commit();


Habe irgendwie die Befürchtung, dass bei jeder DB Abfrage eine neue Session geöffnet wird und das ganze somit sehr lange dauert.
Eine Session besteht ja eigentlich aus mehreren einzelnen Transaktionen. Aber wenn ich so etwas mit Hibernate umsetze, dann gibts ja das Problem, dass die Session bei der ersten abgeschlossenen Transaktion geschlossen wird...


Top
 Profile  
 
 Post subject: Re: Session, Transaction, Unit of Work? (Anfängerfrage...)
PostPosted: Tue Nov 03, 2009 6:30 am 
Expert
Expert

Joined: Thu Jan 08, 2009 6:16 am
Posts: 661
Location: Germany
Hallo,

vereinfacht kannst du dir das so vorstellen, dass eine Session deine Transaktion darstellt. Eine Session ist nämlich immer an eine Transaktion gebunden.
Ich verstehe deine zwei Blöcke nicht, in einem liest du nur, im zweiten schreibst du auch. Was willst du denn jetzt wissen?

Zur Performance der Sessions: Das erstellen einer neuen Session ist nicht das teure, der Aufbau der Verbindung zur DB ist teuer. Deshalb sollte man in Produktivanwendungen auch immer einen connectionpool verwenden, der connections bereit hält.

Vielleicht hilft dir die Reference noch etwas: http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#transactions

_________________
-----------------
Need advanced help? http://www.viada.eu


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.