我正在使用 Spring 3 和 Hibernate 3.6 开发一个网络应用程序。我对 @Transactional
注释和代码结构有一些疑问。
-> 当我使用 @Transactional
(使用 Spring 进行事务管理)时,是否必须在调用它们时使用 try/catch 包围 @Transactional
注释的方法?
例如,当我得到一个加载、更改并返回一个对象的方法时,我从另一个类调用它:我是否必须用 try/catch 包围调用?也许出了什么问题,没有返回对象,数据库连接失败..我不知道。
直到现在,我认为 @Transactional
关心所有可能发生的异常,并在发生错误时回滚此事务中的每个操作。
但如果它发生了,我必须以某种方式通知用户。当我在 try block 中调用事务方法并回滚时,catch block 被激活?
然后我可以告诉用户“确实出了问题”。否则可能不会通知用户?
或者检查是否有对象返回(if/else)就足够了,那么我不需要try/catch? 我是新手,我想听听其他人如何构建他们的代码。谢谢:-)
最佳答案
Handling exceptions在 Spring 中使用 HandlerExceptionResolvers 和 @ExceptionHandlers 真的很容易。我倾向于专门使用 @ExceptionHandler。
您可以使用 @ExceptionHandler处理特定的异常,而不是在 try-catch block 中自己处理它。
如果用户想要一个未找到的资源,而您想要发送 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)
我也相信它按顺序工作,所以如果你处理一般异常它应该是类中的最后一个方法。
关于java - Hibernate、Spring、@Transactional - 围绕 try/catch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379078/