Spring + Hibernate mit Anmerkungen: Keine an den Thread gebundene Hibernate-Sitzung

8

Ich bin neu bei Spring und habe versucht, eine Webanwendung mit folgendem Stack zu erstellen: Apache Tomcat 7, MySQL, Spring MVC, Hibernate 3 mit JPA-Anmerkungen.

Ich versuche zu lernen, indem ich dem Buch "Spring in Action, Third Edition" von Craig Walls folge.

Zuerst wollte ich eine Seite erstellen, die einige Einträge anzeigt, die ich manuell zu meiner DB hinzugefügt habe, aber es sieht so aus, als ob meine Anwendung keine Hibernate Session aus meiner SessionFactory erstellen / abrufen kann. Hier ist meine Ursache Stack-Trace:

%Vor%

Und hier sind meine betroffenen Klassen / Config-Dateien:

Mein HibernateDAO:

%Vor%

Meine Kontaktklasse:

%Vor%

Meine Controller-Klasse:

%Vor%

Hier ist meine Context-Datenkonfigurationsdatei:

%Vor%

Hier ist meine Dispatcher-Servlet-Konfiguration:

%Vor%

Und schließlich, hier ist meine web.xml-Datei:

%Vor%     
nbarraille 25.02.2011, 19:40
quelle

3 Antworten

12

Sie haben anscheinend noch keine Transaktion konfiguriert. Sie können Folgendes in Ihre Context Data Config -Datei einfügen: -

%Vor%

Ändern Sie IHR.PACKAGE auf Ihren tatsächlichen Paketnamen, zum Beispiel: -

%Vor%

Dies ist eine faule Möglichkeit, alle Ihre Methoden in Ihr Projekt mit Transaktion einzubinden.

Übrigens, wenn Sie Ihre Hibernate-Domain-Objekte (zB: parent.getChildren() ) in Ihrer Ansicht träge abfragen, würde ich Ihnen sehr empfehlen, dies in Ihre web.xml: -

einzufügen %Vor%

Dieser Filter erweitert die Hibernate-Sitzung auf die Ansicht.

    
limc 25.02.2011, 19:47
quelle
0

Für was es wert ist ... rennen Sie auch hier hinein, nachdem Sie einige Teile von web.xml verändert haben:

%Vor%

... musste singleSession auf true

setzen     
vector 25.02.2011 19:56
quelle
0

Ich habe heute das gleiche Problem. Es ist mit der Hibernate Unit of Work Conception und der db transaction verbunden. Also kurz gesagt. Wenn Sie Framework Spring verwenden, verfügt es über einen eigenen Transaktionsmanager und eine Session Factory-Implementierung. Aber wenn Sie es verwenden möchten, sollten Sie daran denken, es zu konfigurieren, aber auch die Reihenfolge der Adnotation. Ihr Dienst sollte @Transactional sein, Ihr DAO sollte @Repository sein und DAO @Entity-Beans verwenden. Wenn Sie also die Spring-Implementierung des Transaktions-Managers verwenden, sollten Sie Ihren Transaktions-Service in Ihrem Controller verwenden;) es ist ziemlich einfach und in Ihrem dao tun Sie sessionfactory.getCurrentSession (), um eine Sitzung zu erhalten;)

    
RMachnik 28.03.2013 22:37
quelle