2010-11-09 85 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執行另一個更新以存儲最新的更改。在事務結束時檢查內存中的對象。