2012-10-02 95 views
1

在休眠如何確認/驗證session.save(實體),session.delete(實體)和session.update(實體)操作是否已成功執行W/O做另一個調用db?驗證創建/更新/刪除在休眠成功執行

我的意思是如果你刪除一個實體你如何確認它被刪除。可以在不對數據庫進行另一次調用的情況下完成嗎?

+1

如果出現問題,將拋出一個異常 –

+1

執行'session.close()'後,更改將會持久保存到數據庫中。你通過驗證是什麼意思? – Vikdor

+0

@Vikdor:我正在實現接口方法,我必須根據這些操作的成功/失敗返回true或false。 – Atul

回答

5

如果您想要捕獲會話對象上實體的保存/更新/刪除調用失敗,則應注意HibernateExceptionRuntimeException的子類。如果不拋出異常,則表示操作成功。

如果您使用JPA語義,那麼PersistenceExceptionHibernateException的對應部分,您應該注意處理此類故障情況。

+0

你也可以告訴我,我們如何獲得創建的對象的ID而無需再次調用數據庫?就像在sql中一樣,您可以通過RETURN_GENERATED_KEYS獲得創建對象的ID。 – Atul

+0

在保存/持續/合併/更新方法調用後,如果使用的是Hibernate,則需要調用EntityManager#refresh(實體),以防萬一您正在使用JPA語義和Session#refresh(實體)。 – Vikdor

+0

重要注意事項 - 如果在刪除語句中有額外的條件,並且由於不符合條件而不會發生刪除,則不會拋出異常。您需要檢查executeUpdate()調用中的行計數返回值。如果它是0,則即使沒有異常,刪除也會失敗。 – Amalgovinus

1

session.delete,session.save and session.update如果失敗,方法將取消選中HibernateException

0

如果指定的操作失敗,將拋出Hibernate異常。 所以,你應該有一個HibernateException的catch塊。如果控制進入該塊,那麼您應該返回false以指示操作不成功。