有誰知道是否有一個框架能夠從實體類中去除Hibernate集合以使它們可序列化?我看了看BeanLib,但它似乎只做了實體的深層副本,而不允許我爲實體類中的集合類型指定實現映射。 BeanLib目前不支持Hibernate 3.5和Spring 3(我修改了源代碼並能夠使其工作,但我寧願不這樣做)。基列似乎是一種選擇,但它似乎相當侵略性。我寧願使用簡單的深層複製框架,而不是將另一個框架編織到我的實體和DAO類中。休眠和可序列化實體
我已經嘗試使用XStream與自定義的CollectionConverter和MapConverter成功,但是...這是XStream,我真的不想將我的實體轉換爲XML,然後從內存中的XML返回。這是一個可怕的解決方案。
我只需要創建自己的框架,就像XStream一樣減去所有的XML內容?
我的技術堆棧是:GWT 2.0.4,GWT-Dispatch,Spring 3.0.1和Hibernate 3.5.2。
我XStream的解決方案:
XStream xstream = new XStream();
xstream.addDefaultImplementation(java.util.ArrayList.class, org.hibernate.collection.PersistentList.class);
xstream.addDefaultImplementation(java.util.HashMap.class, org.hibernate.collection.PersistentMap.class);
xstream.addDefaultImplementation(java.util.HashSet.class, org.hibernate.collection.PersistentSet.class);
xstream.addDefaultImplementation(java.util.ArrayList.class, org.hibernate.collection.PersistentBag.class);
Mapper mapper = xstream.getMapper();
xstream.registerConverter(new HibernateCollectionConverter(mapper));
xstream.registerConverter(new HibernateMapConverter(mapper));
String xml = xstream.toXML(entity);
Entity newEntity = (Entity) xstream.fromXML(xml);
它使用什麼實現無關緊要。 Hibernate使用它自己的集合實現,如PersistentBag for java.util.List,它們是不可序列化的。深拷貝框架似乎複製這些集合。我需要指定java.util.List接口的可序列化實現。所以PersistentBag - > java.util.ArrayList。 – 2010-07-06 03:27:59
推土機將用標準實現替換Hibernate代理 - ArrayList,HashSet等。這就是爲什麼我提出這個問題,對不起,如果這部分內容不清楚。 – 2010-07-06 03:53:48
謝謝。我試了一下,它運行良好。 – 2010-07-06 06:42:20