Wenn in Winterschlaf eine Kaskadierung auftritt, gibt es möglicherweise faule Ladeprobleme. Zum Beispiel habe ich jetzt eine Kontoklasse (Administrator), eine Kategorie (Produktkategorie) und Produktklasse (Produkt). Von links nach rechts ist es eine Eins-zu-Viele-Beziehung, und von rechts nach links wird @manytoone (fetch = fetchType.lazy) festgelegt. Ich möchte jetzt die Produktinformationen herausfinden und sie in das JSON -Format verpacken, um sie an die Rezeption weiterzugeben. Ich benutze die Anweisung der Abfrage im Hintergrund als:
Aus Produkt p links Join Fetch P.Category, wo P.Name wie: Name
Auf diese Weise können Sie das Produkt herausfinden, und dann wird auch die Kategorie im Produkt eingefügt. Das Konto in der Kategorie ist jedoch kein tatsächliches Objekt, sondern ein temporäres Proxy -Objekt. Dies ist leicht zu verstehen, da ich das Produkt und nur eine kaskadierte Kategorie überprüft habe. In Bezug auf Kategorie und Konto ist es gemäß dem tatsächlichen (faul) konfiguriert.
Nehmen Sie das Abfrageprodukt nun in die Karte ein und konvertieren Sie es dann in das JSON -Format und kehren Sie in die Rezeption zurück. Es wird definitiv ein faultes Ladungsproblem geben, da das Kontoobjekt während des Konvertierens von JSON aufgenommen wird, aber die Sitzung wurde zu diesem Zeitpunkt geschlossen, sodass ein Fehler gemeldet wird. Eine sehr direkte, aber nicht sehr gute Lösung besteht darin, die faule Kategorie in Eager zu ändern, damit die Kontoinformationen gefunden werden können, dies ist jedoch nicht gut. Deshalb verwenden wir eine andere Methode: Stellen Sie eine Blacklist in Struts.xml fest und verwenden Sie regelmäßige Ausdrücke, um das Konto in der Kategorie zu filtern, wenn Sie in das JSON -Format konvertieren, sodass wir das Kontoobjekt nicht überprüfen werden, und es wird kein Problem der Faulheit beladen. wie folgt:
Zu diesem Zeitpunkt sollte es kein Problem geben. In meinem Projekt melde ich jedoch immer noch faule Ladeausnahmen, was bedeutet, dass es nicht funktioniert, nachdem ich auf diese Weise konfiguriert bin. Aber theoretisch ist es nach der Konfiguration in Ordnung, und die Daten können in das JSON -Format verpackt und normal an die Rezeption übergeben werden. Dieses Problem störte mich zwei Tage lang, deshalb habe ich einfach faul zu eifrig geändert und begann, das Projekt zu machen.
Heute habe ich die Ausnahme hier in einer anderen Hibernate -Ausnahme kontaktiert und sie gelöst! Heute in Hibernate möchte ich die GET -Methode nennen, um die Produktinformationen zu erhalten, aber ich kann sie nicht bekommen. Es gibt keine Nachricht auf der Hintergrundkonsole. Da ich den Entwicklermodus eingeschaltet habe, zeigte die Rezeption die Fehlermeldung an:
java.lang.classcastexception: cn.it.shop.model.product _ $$ _ Javassist_0 kann nicht an javassist.util.proxy.proxy </span> gegossen werden
Kann nicht in einen Proxy konvertiert werden? ? Warum zu einem Agenten wechseln? Sind die Agenten im Allgemeinen nicht in tatsächlichen Objekten umgewandelt werden? Also suchte ich im Internet und stellte fest, dass dieses Problem möglicherweise auf ein Javassist -JAR -Paket in dem Projekt zurückzuführen ist, das in Konflikt steht. Ich ging zum Projekt, um es zu überprüfen, und es stellte sich heraus, dass es wahr war:
Es Konflikte wirklich ... also lösche ich nur den Javassisten-3.11.0.ga.jar im Struts-Paket. Hibernate ist korrekt und Sie können die Produktinformationen normal erhalten. Dann erinnerte ich mich an das Problem, dass Struts2 vor 2 Tagen zu JSON wechselte, also ging ich zurück, um mich nach Lazy zu wechseln. Das Problem war weg und ich konnte auch normal zu JSON konvertieren. Ich war depressiv. Es wurde wirklich durch den Konflikt zwischen JAR -Paketen verursacht. Weil es zu diesem Zeitpunkt keinen Fehler gab, aber ich konnte die zurückgegebenen JSON -Daten auf der Rezeption nicht finden. Ich wusste nur, dass die JSON -Daten nicht zurückgegeben wurden. Es muss ein Problem mit der Hintergrundübertragung auf JSON sein. Nach der vorhandenen Erfahrung waren 90% davon faul geladen, aber ich hatte nicht erwartet, dass es durch den JAR -Paketkonflikt verursacht wird.
Später: Wenn das JAR -Paket nicht in Konflikt gerät, aber JSON nicht konvertieren kann, handelt es sich im Grunde genommen um ein Problem, das durch faule Laden verursacht wird. Die Methode zum Ausfiltern von faulen Ladeobjekten durch Konfigurieren von Blacklists in Struts.xml ist sehr praktisch. Es ist nicht erforderlich, die Konfiguration in Pojo zu ändern. Ich werde übertragen, welche Felder ich zu JSON übertragen möchte, und wenn ich nicht möchte, ist es sehr bequem.
Original -Link: http://blog.csdn.net/eson_15/article/details/51394302
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.