2009-01-23 84 views
0

我正在使用hibernate来存储来自Web服务的一组对象。休眠刷新不会更新数据库

由于每个对象都被接收,所以我使用休眠来保存它们。

接收对象包装在一个事务中,并且在收到最终对象后所有对象都出现在数据库中。

我现在试图让每个对象在保存时出现在数据库中。我试图做到这一点

getHibernateTemplate().saveOrUpdate(foo); 

getHibernateTemplate().flush(); 
getHibernateTemplate().clear(); 

我的理解是应该删除hibernate的缓存值并将值写入数据库。

任何学习或指导?

回答

1

感谢Brian的帮助。问题原来是另一个包装保存调用的类中的for循环。

解决方案是删除for循环并用iterator替换它。

Hibernate为整个for循环保持相同的事务。使用iterator,Hibernate似乎开始一个新的事务,因此在开始下一个事务之前执行对数据库的提交,然后进行刷新。

1

如果您仍在一个事务中,那么只有打开该事务的会话或连接才能看到记录。在某些数据库中,如果执行脏/未提交的读操作,应该从另一个会话中看到它们。我会尝试在flush之后使用相同的Hibernate会话来运行select,以确认它确实在数据库中。只是不要通过主键进行查询,或者您可以从缓存中获取它。