Hibernate與數據庫的觸發器協同工作
1、觸發器使 Session 的緩存中的持久化對象與數據庫中對應的數據不一致:觸發器運行在數據庫中, 它執行的操作對 Session 是透明的 Session 的
解決方案: 在執行完 Session 的相關操作后, 立即調用 Session 的 flush() 和 refresh() 方法, 迫使 Session 的緩存與數據庫同步(refresh() 方法重新從數據庫中加載對
象)

2、update() 方法盲目地激發觸發器: 無論游離對象的屬性是否發生變化, 都會執行 update 語句, 而 update 語句會激發數據庫中相應的觸發器
解決方案:在映射文件的的 <class> 元素中設置 select-before-update 屬性: 當 Session 的 update 或 saveOrUpdate() 方法更新一個游離對象時, 會先執行 Select 語句, 獲得當前游離對象在數據庫中的最新數據, 只有在不一致的情況下才會執行 update 語句(沒有用到觸發器的時候一般的情況下最好不要設置,因為會降低效率的)
posted on 2014-10-30 11:57 順其自然EVO 閱讀(358) 評論(0) 編輯 收藏 所屬分類: 測試學習專欄 、數據庫