0
我正在用spring + hibernate開發web應用程序。據我所知,最好的做法是將@transactional放入服務層。如果在將數據更新到數據庫時發生任何異常,Spring將拋出DataAccessException。春季例外處理
以下是我的高級班結構。
@Transactional
class OrderService {
public void createOrder() {
try {
orderDAO.createOrder();
} catch (DataAccessException e) {
// convert into business exception and sends back to presentation logic.
}
}
}
這裏發生的是數據訪問異常只有在方法完成後纔會拋出。所以如果發生任何異常,我無法將其轉換爲catch塊中的業務異常。
解決方法是刷新dao方法中的hibernate會話,但我不喜歡這種方法。有沒有更好的方法呢?
您可以使用AOP攔截器,但爲什麼? DataAccessException有什麼問題? Spring已經提供了一個異常層次結構,將您從持久化框架特定的異常類型中分離出來。爲什麼你還想在另一個異常層次上呢? – 2014-10-18 05:59:42
我想爲用戶提供自定義消息。不是春天給的那個。除AOP之外,您還有其他選擇會引發建議嗎? – javafan 2014-10-18 18:52:39
爲什麼你不在UI層捕獲DataException呢?顯示錯誤消息不是服務層的工作。 – 2014-10-18 22:35:19