GWT, Hibernate und das serialize-Problem


Quelle : http://code.google.com

Letztens war ich fast am Verzweifeln, als unser GWT-Projekt einfach nicht kompilieren wollte. Grund dafür war das Hinzufügen von Data-Objects in das Share via Hibernate zur Nutzung auf Client- und Server-Seite. Klar, die sind nun mal nicht von Haus aus serialisierbar und alles, was unter Share liegt, sollte laut Google verschiedene Voraussetzungen erfüllen, da sonst unter Umständen Exceptions geworfen werden. Aber bevor ich mich mit dem dozer-Framework rumschlage, habe ich ein wenig weitergesucht und ein nettes Feature von gwt-2.0.x gefunden : GwtTransient. Denn da die List-Implementierung von Hibernate leider nicht das Serializable-Interface implementiert, muss man den Transient-Modus für solche Members anders erreichen. Und warum nochmal alles tippen, wenn es doch Hyperlinks gibt : Original-Message
Und hier der Auszug, der eigentlich alles erklärt :

In GWT 2.0.x you can use the annotations of the JPA and JDO without problems and without using any additional library. Your source code will be compiled normally. No exception (SerializableException) will occur.

So what’s the problem:
In a relationship one-to-many, when the GWT tries to serialize this attribute that is a „List“, will probably return an exception (LazyInitializationException). Return an attribute that has a relationship one-to-many is not good for various reasons, the principal is the performace.

Solution
Add the annotation @GwtTransient above in the attribute „List“ and everything will work normally.

Advantage:
You use a native GWT solution to deal with this type of information. Decreases some jars in your application, and get 10 ~ 200ms each request.