On 11.08.09 10:58 "Sascha Schäfer" <ders...@t-online.de> wrote:
> Nun würde ich gern Spring mitteilen, dass die Session für die Dauer
> meiner obigen Methode (runQuery()) offen bleiben soll, damit ich mir
> die Attribute des Objekts ansehen kann. Ich dachte, dass geht über den
> Transaction-Manager von Spring. Deshalb habe ich mich der
> Transactional-Annotation bedient um zu sagen, dass hier eine read-
> Only-
> Transaction geöffnet werden soll. Aber falsch gedacht.
Na ja, die Methode ist mit Propagation.SUPPORTS markiert. Das heißt soviel
wie: Ich unterstütze eine Transaktion. Du darfst mich mit einer aufrufen
oder auch ohne. Meiner Ansicht nach übrigens eine ziemlich sinnlose
Einstellung. Anyway. REQUIRED sollte helfen.
Gruß,
Eberhard
--
Eberhard Wolff
Regional Director
SpringSource GmbH
Sitz der Gesellschaft: Uhlandstrasse 75 - D-10717 Berlin
Geschäftsführer: Steven Schuurman, Rod Johnson
Amtsgericht Charlottenburg - HRB 103773 B
Author, "Spring 2 - Framework für die Java Entwicklung"
http://www.spring-buch.de/
Founding Member Java Champions
https://java-champions.dev.java.net/
Mail: eberhar...@springsource.com
Skype: ebr.wolff
Blog: http://JandIandMe.blogspot.com/
Mailing List: http://www.springsource.com/newsletter
On 11.08.09 11:31 "Sascha Schäfer" <ders...@t-online.de> wrote:
> Das hilft leider auch nicht. Es kommt immer noch zu einer
> LazyInitializationException. Das Markieren mit Propagation.SUPPORTS
> habe ich aus dem Buch "Spring in Action". Diese Propagation-
> Einstellung ist meines Erachtens für lesende Methoden gedacht.
Propagation.SUPPORTS sagt einfach, ich kann mit einer Transaktion umgehen,
aber ich muss nicht unbedingt eine haben. Das ist kein Unterschied zu gar
keiner Annotation. Ich würde REQUIRED nehmen, dann läuft es auf jeden Fall
in einer Transaktion. Das "Nur-Lesen" ist ja durch das read-only-Attribut
definiert.
Ich kenne allerdings Spring in Action nicht. Wäre interessant, was die als
Begründung geben.
Ansonsten: Schön, dass es mittlerweile geht!
On 11.08.09 13:20 "Sascha Schäfer" <ders...@t-online.de> wrote:
>
> Also eine konkrete Begründung gibt Spring in Action nicht für die die
> Verwendung von Propagation.SUPPORTS. Es wird so erklärt, dass lesende
> Methoden nicht zwingend eine Transaktion brauchen für den lesenden
> Zugriff. Stimmt ja auch, die Session reicht aus.
Die Hibernate Session ist aber bei Spring überlicherweise an die Transaktion
gebunden, d.h. die haben dieselbe Lebensdauer. Außerdem sind Transaktionen
beim Lesen sinnvoll, da es auch Isolation von anderen Transaktionen bietet,
d.h. man bekommt für die Dauer einer Transaktion eine konsistente Sicht auf
die Daten.
Aber Hauptsache das Problem ist erstmal gelöst...