2010-11-09 56 views
0

我有这个奇怪的问题。在一个带有spring,smartgwt和hibernate的J2ee webapp中,碰巧我有一个A类,它有一组B类,它们都被映射到表A和表B中。休眠不保存外键,但与junit没关系

我写了一个简单的测试用例来测试特别是在插入期间,应该插入,更新,删除和一切正常工作的服务管理器。最后,我在A中有一个记录,在B中记录外键为A.

但是,当我尝试从Web应用程序调用服务时,B中的实体保存时没有外键引用。

我相信服务是一样的。有一两件事我注意到的是,使Hibernate日志,似乎当服务从应用程序调用,多了一个更新由:

  • 插入一个
  • 刀片B
  • 更新
  • 更新乙
  • 更新B(仅限外键)
  • 更新A < --- ???
  • 更新B < --- ???

相反,JUnit测试用例在运行时,更新如下:

  • 插入
  • 插入乙
  • 更新甲
  • 更新乙
  • 更新B(外键)

I假设最新的更新是导致错误的原因,也许它是覆盖值。 考虑到应用程序使用弹簧,与众所周知的DAO +管理器机制,我可以在哪里调查解决此问题?有人告诉我会话没有关闭,所以休眠会自己释放对象之前再做一次更新。

我很确定所有的配置hbm,xml和其他都很好......但我可能错了。

回答

0

只是猜测:是否可以在插入它们后使用对象?当你调用commit时,Hibernate会在实际的时间点存储实际的内存状态。因此,如果您调用插入对象的服务(调用session.save),但在调用代码中再次更改实体时,则强制Hibernate执行另一个更新以存储最新的更改。在事务结束时检查内存中的对象。