Transaktionsberatung im Winterschlaf

769
MattGrommes

Ich bin neu bei Hibernate, also brauche ich Ratschläge / Anweisungen für Transaktionen.

Ich habe ein DAO wie

public class MyDao extends HibernateDaoSupport implements IMyDao {

 @Override
 public Foo getFoo(int id) {

  return (Foo)getHibernateTemplate().load(Foo.class, id);

 }
}

Wird Hibernate / Spring mit diesem Setup (mit HibernateDaoSupport) Transaktionen für mich abwickeln? Einige der Beispiele, die ich sehe, sagen Ja, andere zeigen die Verwendung

Transaction tx = getHibernateTemplate().getSessionFactory().getCurrentSession().beginTransaction();

um eine Transaktion in jeder DAO-Methode zu erhalten.

Im Moment gehe ich davon aus, dass mein minimales DAO korrekt ist, aber ich möchte eine "größere" Transaktion durchführen, die einige Hibernate-Aufrufe in einer Methode enthält. Würde ich dort die manuelle Transaktionsmethode verwenden? Muss ich es überall benutzen? Vielen Dank.

Antworten
1
Gehört zu stackoverflow? Michael K vor 9 Jahren 0
Ja, die Frage ist hier eindeutig nicht "macht es meinen Arsch fett", sondern "funktioniert es" (siehe diese Meta-Antwort: http://meta.codereview.stackexchange.com/questions/138/how-is- this-site-anders-von-stackoverflow / 141 # 141) Riduidel vor 9 Jahren 2
Ich war zerrissen, ob das auf SO gehört oder nicht, da ich vielleicht recht hatte. Ich möchte nur wissen, ob es der richtige Weg ist oder nicht. Ich bin gut damit, es zu bewegen. MattGrommes vor 9 Jahren 0

2 Antworten auf die Frage

2
time4tea

Im Allgemeinen sollten Sie Transaktionen niemals mit Dao-Code behandeln, da Sie nie wissen, wo sich die Transaktionsgrenze befindet. Sie sollten denjenigen, der die Transaktionen steuern möchte, diese steuern lassen.

Code, der eine Transaktion in jeder Dao-Methode startet und festschreibt, ist wahrscheinlich problematisch.

Übrigens: auf 'dao' nicht besonders scharf, aber so wie ich es benutze, werde ich das auch tun.

2
ssmithstone

Ich würde Spring und ihre Ruhezustandsunterstützung persönlich in Ihre Anwendung einführen, dann können Sie dort den Winterschlaf-Transaktionsmanager verwenden und Transaktionen in der XML-Datei definieren und sie dann im eigentlichen Code vergessen

Ich habe Spring tatsächlich eingerichtet und dachte, mit HibernateDaoSupport würden Transaktionen automatisch abgewickelt. Ich werde alle erforderlichen XML-Änderungen überprüfen, danke. MattGrommes vor 9 Jahren 0