Ich benutze Hibernate mit Spring on Tomcat. Ich lese und lese das oft auf JBoss wiki page auf das Thema, und das war hilfreich. Aber es hinterlässt mir einige Fragen.Hibernate offene Sitzung in der Ansicht: Transaktion pro Anfrage?
Die Idee, eine Transaktion für jede Anfrage zu starten, beunruhigt mich. Ich denke, ich könnte den Filter auf bestimmte Controller beschränken - vielleicht setzen alle meine Controller, die eine Transaktion benötigen, unter einen Pseudo- "tx" -Pfad oder so. Aber ist es nicht eine schlechte Idee, Transaktionen zu verwenden, wenn Sie nicht wissen, ob Sie eine brauchen werden? Und wenn ich nur ein paar Anfragen einlese - gelesen, die sehr wahrscheinlich aus einem Cache stammen - bin ich nicht besser ohne eine Transaktion?
Ich habe Beiträge gelesen, in denen erwähnt wird, wie sie die Transaktionen auf der Service-Ebene behandelt haben, und ich möchte dies mit Spring machen. Aber wie sieht der Filtercode aus? Ich möchte immer noch die Sitzung in meiner Sicht für einige faul laden.
Wenn ich nur
sessionFactory.getCurrentSession()
in meinem Filter aufrufen muss, wie wird es wieder in die Session-Factory für die Wiederverwendung "freigegeben"? (Ich erwartete einesession.close()
oder etwas, auch wenn Transaktionen verwendet werden.) Wer sagt der Sitzungsfabrik, dass diese Sitzung wiederverwendet werden kann?Vielleicht ist es der
beginTransaction()
Aufruf, der eine bestimmte Datenbankverbindung für die Dauer einer Anfrage an eine bestimmte Sitzung bindet? Andernfalls zieht eine Sitzung Datenbankverbindungen aus dem Pool nach Bedarf, oder?
Vielen Dank für Ihre Geduld mit all meinen Fragen.
(Und wenn deine Antwort ein Link zur Frühlingsdokumentation sein wird, bringst du mich zum Weinen. Das willst du nicht, oder? Ich werde echtes Geld bezahlen, wenn die Leute aufhören würden, auf Spring zu antworten Fragen auf diese Weise.)
Ich ging von hier nach dort und dann nach dort, über das Web für eine Woche zu diesem Thema überspringen ... und das ist das erste Mal, dass ich gelesen habe, dass Spring einen OpenSessionInView-Filter hat. Vielen Dank. – Marvo
Mann, das funktioniert einfach wunderbar. Vielen Dank! – Marvo
Ich dachte immer, es würde als eine Transaktion funktionieren. Aber die Transaktion ist wirklich begrenzt durch @Transactional. Danke für die Erklärung. –