2011-07-06 76 views
2

在我们的应用程序中,我们有双重持久性。首先,实体可以在MySQL数据库中在线保存(我们使用的是Hibernate),其次,实体可以通过序列化保存在本地。休眠和序列化

我所说的实体是包含KnowledgeBase对象的类User的对象和KnowledgeBase包含实体(List<Card>List<Deck>)的两个列表。

这两种持久性都可以单独工作,但是当我试图从数据库中加载序列化的User对象(即至少一次(实际上是两次)低谷的Hibernate)时会出现问题。

我注意到ArrayList里面的KnowledgeBasePersistentBag所取代。这可能是我的问题的根源吗?

另一个猜测可能是懒加载导致这些麻烦......有没有办法让Hibernate在某个时刻完全加载对象? (除了急于加载...)

回答

4

是的,Hibernate.initialize(..)初始化对象和集合。

然后,如果需要,您可以使用拷贝构造函数的常规java.util那些替换集合:setList(new ArrayList(list))

+1

这的确是初始化对象和集合,但它一直在Hibernate专有的集合类型。我们遇到了使用XStream编组/解组装Hibernate加载对象的问题。有没有更好的方法,而不仅仅是重载一个Hibernate加载的对象到同一类型的正常实例化的对象? – Olaf

+0

@Olaf是的,请在一分钟内查看我的更新 – Bozho

+0

谢谢!我下次必须使用这个,我必须使用XStream将Hibernate加载的实体编组为XML。 – Olaf