Frühjahr OpenSessionInViewInterceptor funktioniert nicht
Hatte ich den (in)berühmten problem mit hibernate und lazy loading wenn Ansichten gerendert werden.... Wie viele sagen, die einzigen zwei Lösungen sind:
- Machen, die Transaktions-Methode (und das ist nicht immer desiderable)
- Verwenden OpenSessionInViewInterceptor.
Letzteres ist vorzuziehen IMO. Trotzdem bin ich nicht sicher, ob dies interceptor feuern (und in der Tat bekomme ich die gleiche Lazy loading exception und nichts ändert):
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: it.jsoftware.jacciseweb.beans.Listino.prodotti, no session or session was closed
Ich bin mit der einfachen annotation-basierte url-mappings, so dass das Lesen der Dokumentation für Spring 3, ich bin mit dieser in meinem servlet-context.xml:
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<!-- <property name="order" value="2" /> -->
<property name="interceptors">
<list>
<ref bean="openSessionInViewInterceptorInst" />
</list>
</property>
</bean>
Sollte der trick. Aber es funktioniert nicht und ich bekomme die Ausnahme. Wie kann ich sicherstellen, dass meine interceptor feuern? Wie kann ich dieses Problem lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie die @RequestMapping annotation? Wenn ich mich Recht erinnere gab es ein Problem mit dem setzen der interceptor auf die url bean. Mit Spring 3.0, die Sie definieren können, der interceptor so:
unter der Annahme, dass die sessionFactory ist ein Verweis auf die SessionFactory bean.
Werden Sie auch brauchen, um das mvc-namespace.
<ref local="sessionFactory" />
zu<ref bean="sessionFactory" />
. Nach dem Versuch, dieses Beispiel hatte ich diese exception :There is no ID/IDREF binding for IDREF 'sessionFactory'
. Überprüfen Sie diesen Beitrag javawebdevelop.com/3544671/]Versuchen Sie es mit
<mvc:interceptors>
.Übrigens
@Transactional
ist eine andere Sache - es nicht machen Ihren Sammlungen arbeiten in der "Ansicht". Öffnet Sie nur eine Transaktion (und session) für die annotierten Methode (und die Methoden, die es fordert)Wenn Sie mit Struts2 mit Spring und Hibernate, Versuchen, OpenSesisonInViewFilter und weisen ihn in web.xml