有谁知道是否有一个框架能够从实体类中剥离 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);
Dozer http://dozer.sourceforge.net/对此效果很好。只需将 bean 实例映射到其自身的副本即可。
obj = dozerBeanMapper.map(obj, obj.getClass());
在将实例映射到新实例时,Dozer 会忽略用于集合的任何特定运行时实现,而是使用标准实现或类默认的任何实现。
我查看了 BeanLib,但它似乎只进行实体的深层复制,而不允许我为实体类中的集合类型指定实现映射。
我很好奇,为什么您的集合类型使用什么实现很重要?作为最佳实践,您的持久类最好参考List
, Set
等等,实际的实现对于使用这些类的任何人来说都不重要——他们只关心数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)