Hibernate和Serializable实体
有谁知道是否有一个框架能够从实体类中去除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);
推土机适用于此。 只需将bean实例映射到自身的副本即可。
obj = dozerBeanMapper.map(obj, obj.getClass());
在将实例映射到新实例时,Dozer会忽略用于集合的任何特定运行时实现,而是使用标准实现或类默认的任何实现。
我看了一下BeanLib,但它似乎只是做了实体的深层副本,而不允许我为我的实体类中的集合类型指定实现映射。
我很好奇,为什么对你的集合类型使用什么实现很重要? 作为最佳实践,最好将持久化类引用到List
, Set
等,实际的实现对于使用这些类的任何人都无关紧要 – 他们只关心数据。
- Spring 4.1.0.RELEASE和Hibernate 4.3.6.Final的依赖性问题
- java.lang.ClassCastException:[Ljava.lang.Object; 无法强制转换为entity.UserEntity
- @Column可插入,updateble与Spring JPA不相符?
- Hibernate – Custom Dialect的BigDecimal列映射
- 关于Hibernate的createQuery()的空指针
- 启用Hibernate日志记录
- Spring @Transaction没有启动事务
- Hibernate + Oracle IN子句限制,如何解决呢?
- Spring / Hibernate测试:在DDL创建后插入测试数据