gpt4 book ai didi

java - hibernate 和可序列化实体

转载 作者:行者123 更新时间:2023-12-04 06:50:32 25 4
gpt4 key购买 nike

有谁知道是否有一个框架能够从实体类中去除 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为此效果很好。只需将 bean 实例映射到其自身的副本即可。

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

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

I had a look at BeanLib but it only seems to do deep copies of entities while not allowing me to specify implementation mappings for the collection types in my entity classes.



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

关于java - hibernate 和可序列化实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com