I do the same exact trick, but I convert a PersistentBag to an ArrayList. The tricky part is figuring out where to put your "copy" code so that it doesn't get in the way or complicate your existing code. I use a custom field serializer, which is an undocumented feature of GWT.
If you have an object, say Foo, you can customize the GWT RPC serialization for Foo by creating a class in the same package as Foo, called Foo_CustomFieldSerializer. Then you add two static methods to the class as follows: public static void serialize(SerializationStreamWriter writer, Foo instance) throws SerializationException { } public static void deserialize(SerializationStreamReader reader, Foo instance) throws SerializationException { } Then for every field, you call the appropriate methods in the writer or reader to serialize or deserialize. Here's the cool part. When you encounter a collection managed by Hibernate, you can simply swap out the collection for a GWT safe implementation. So if Foo has a one to many collection called bars (say it's a List), you can safely serialize it with the following code: public static void serialize(SerializationStreamWriter writer, Foo instance) throws SerializationException { ... writer.writeObject(new ArrayList(instance.getBars())); ... } and the deserialization is just as easy public static void deserialize(SerializationStreamReader reader, Foo instance) throws SerializationException { ... instance.setBars((List)reader.readObject()); ... } The best part about using a custom field serializer is that your original object does not get modified. I tried an approach where I swapped out the collection just prior to returning from my RPC method. This caused two problems. First it complicated the code. Second, Hibernate detected a change to my object and persisted it. This wasn't a huge problem, but it did cause an unnecessary write to the database. I also looked into Hibernate4GWT. But I found that if you don't need to do lazy loading of persistent collections on the client side, then Hibernate4GWT is overkill. -Greg On Dec 8, 2:55 pm, "Arthur Kalmenson" <[EMAIL PROTECTED]> wrote: > It's also possible to force it to use a HashSet by copying the > contents of the PersistentSet to a new HashSet. That worked for us. > > -- > Arthur Kalmenson > > > > On Sun, Dec 7, 2008 at 7:05 AM, gregor <[EMAIL PROTECTED]> wrote: > > > Hi, > > > PersistentSet is one of Hibernate's "magic collections". Like the > > proxies that Hibernate also uses for lazy loading, domain objects so > > adorned are incompatible with the GWT Emulation library and AFAIK > > there is no direct way around it at the moment. You have to copy them > > to DTO representations for transfer and copy them back on return. > > > Hibernate4gwt does this for you - have you had a look at it? > > > regards > > gregor > > > On Dec 7, 9:54 am, LoneWolf <[EMAIL PROTECTED]> wrote: > >> Hey, > >> Our application is using Hibernate 3 as the persistence mechanism, and > >> of course we have one-to-many relationship. > >> The problem is when trying to pass a domain object that has a list of > >> lazy initialized objects back to the browser, I got this exception: > >> ++++ > >> Caused by: com.google.gwt.user.client.rpc.SerializationException: Type > >> 'org.hibernate.collection.PersistentSet' was not included in the set > >> of types which can be serialized by this SerializationPolicy or its > >> Class object could not be loaded. For security purposes, this type > >> will not be serialized. > >> ++++ > >> Yes, I understand this exception but to overcome this issue? > >> Thanks.- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---