java – Hibernate,Spring,@ Transactional – 用try/catch环绕?

前端之家收集整理的这篇文章主要介绍了java – Hibernate,Spring,@ Transactional – 用try/catch环绕?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正致力于使用Spring 3和Hibernate 3.6开发Web应用程序.我对@Transactional Annotation和代码结构有一些疑问.

– >当我使用@Transactional(使用Spring进行事务管理)时,是否必须在调用它们时使用try / catch包围@Transactional-annotated方法

例如,当我得到一个加载,更改并返回一个对象的方法然后我从另一个类调用它时:我是否必须使用try / catch包围调用?也许出了点问题,没有返回任何对象,数据库连接失败..我不知道.

到目前为止,我认为@Transactional会关注所有可能发生的异常,并在发生错误时回滚此事务中的每个操作.
但如果它发生,我必须以某种方式通知用户.当我在try-block中调用transactional-method并回滚它时,catch块被激活了?
我可以告诉用户“出了问题”.否则用户可能不会被告知?

或者是否足以检查是否有返回的对象(如果/ else),那么我不需要try / catch?
我是新的,我想听听其他结构如何编码.谢谢 :-)

最佳答案
使用HandlerExceptionResolvers和@ExceptionHandlers,Spring中的Handling exceptions非常简单.我倾向于独占使用@ExceptionHandler.

您可以使用@ExceptionHandler来处理特定异常,而不是在try-catch块中自己处理它.

如果用户想要一个未找到的资源,并且您想要发送404.

@ExceptionHandler(NotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public void handleNotFoundException(NotFoundException exc) {
  // log something.
}

如果存在服务器问题,您希望发送500

@ExceptionHandler(SomeException.class)
public void handleException(SomeException exc,WebRequest request,HttpServletResponse response) {
    response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"Sorry dude,my server broke");
}

您还应该狭隘地处理异常.通常你不应该做@ ExceptionHandler(Exception.class),我也相信它按顺序工作,所以如果你处理一般的Exception,它应该是类中的最后一个方法.

猜你在找的Spring相关文章