在休眠如何確認/驗證session.save(實體),session.delete(實體)和session.update(實體)操作是否已成功執行W/O做另一個調用db?驗證創建/更新/刪除在休眠成功執行
我的意思是如果你刪除一個實體你如何確認它被刪除。可以在不對數據庫進行另一次調用的情況下完成嗎?
在休眠如何確認/驗證session.save(實體),session.delete(實體)和session.update(實體)操作是否已成功執行W/O做另一個調用db?驗證創建/更新/刪除在休眠成功執行
我的意思是如果你刪除一個實體你如何確認它被刪除。可以在不對數據庫進行另一次調用的情況下完成嗎?
如果您想要捕獲會話對象上實體的保存/更新/刪除調用失敗,則應注意HibernateException
,RuntimeException
的子類。如果不拋出異常,則表示操作成功。
如果您使用JPA語義,那麼PersistenceException
是HibernateException
的對應部分,您應該注意處理此類故障情況。
你也可以告訴我,我們如何獲得創建的對象的ID而無需再次調用數據庫?就像在sql中一樣,您可以通過RETURN_GENERATED_KEYS獲得創建對象的ID。 – Atul
在保存/持續/合併/更新方法調用後,如果使用的是Hibernate,則需要調用EntityManager#refresh(實體),以防萬一您正在使用JPA語義和Session#refresh(實體)。 – Vikdor
重要注意事項 - 如果在刪除語句中有額外的條件,並且由於不符合條件而不會發生刪除,則不會拋出異常。您需要檢查executeUpdate()調用中的行計數返回值。如果它是0,則即使沒有異常,刪除也會失敗。 – Amalgovinus
session.delete,session.save and session.update
如果失敗,方法將取消選中HibernateException
。
如果指定的操作失敗,將拋出Hibernate異常。 所以,你應該有一個HibernateException的catch塊。如果控制進入該塊,那麼您應該返回false以指示操作不成功。
如果出現問題,將拋出一個異常 –
執行'session.close()'後,更改將會持久保存到數據庫中。你通過驗證是什麼意思? – Vikdor
@Vikdor:我正在實現接口方法,我必須根據這些操作的成功/失敗返回true或false。 – Atul