首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate和可序列化实体

Hibernate和可序列化实体
EN

Stack Overflow用户
提问于 2010-07-06 11:05:06
回答 1查看 4.3K关注 0票数 2

有没有人知道有没有一个框架能够从实体类中剥离Hibernate集合,使它们成为可序列化的?我看过BeanLib,但它似乎只做了实体的深层复制,而不允许我为实体类中的集合类型指定实现映射。BeanLib目前不能与Hibernate3.5和Spring3一起工作(我确实修改了源代码,能够让它工作,但我不想这样做)。Gilead似乎是一个选择,但它似乎相当具有侵入性。我宁愿使用一个简单的深度复制框架,而不是将另一个框架编织到我的实体和DAO类中。

我尝试过将XStream与自定义CollectionConverter和MapConverter一起使用,但成功地使用了…它是XStream,我真的不想在内存中将实体转换成可扩展标记语言,然后再从可扩展标记语言返回。这是一个糟糕的解决方案。

我是否只需要创建自己的框架,就像XStream那样,去掉了所有的XML内容?

我的技术栈是: GWT 2.0.4,GWT-Dispatch,Spring 3.0.1和Hibernate 3.5.2。

我的XStream解决方案:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-06 11:21:04

Dozer在这方面做得很好。只需将bean实例映射到自身的副本即可。

代码语言:javascript
复制
obj = dozerBeanMapper.map(obj, obj.getClass());

在将实例映射到新实例时,Dozer忽略用于集合的任何特定运行时实现,而是使用标准实现或您的类默认使用的任何实现。

我看过BeanLib,但它似乎只做了实体的深层复制,而不允许我为实体类中的集合类型指定实现映射。

我很好奇,为什么你的集合类型使用什么实现很重要呢?作为最佳实践,您的持久化类最好引用ListSet等,实际的实现对使用这些类的任何人来说都不重要-他们只关心数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3183269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档