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...