【问题标题】:Hibernate and Serializable Entities休眠和可序列化实体
【发布时间】:2010-07-06 03:05:06
【问题描述】:

有谁知道是否有一个框架能够从实体类中剥离 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);

【问题讨论】:

    标签: java hibernate serialization entity


    【解决方案1】:

    Dozer 很适合这个。只需将 bean 实例映射到自身的副本即可。

    obj = dozerBeanMapper.map(obj, obj.getClass());
    

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

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

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

    【讨论】:

    • 使用什么实现很重要。 Hibernate 使用它自己的集合实现,例如用于 java.util.List 的 PersistentBag,它们是不可序列化的。深拷贝框架似乎复制了这些集合。我需要指定 java.util.List 接口的可序列化实现。所以 PersistentBag -> java.util.ArrayList.
    • Dozer 将用标准实现替换 Hibernate 代理 - ArrayList、HashSet 等。这就是我建议它的原因,如果这部分问题不清楚,请见谅。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多