java - Hibernate、Spring、@Transactional - 围绕 try/catch?

标签 java hibernate spring exception transactional

我正在使用 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/

相关文章:

java - 当表填充数据时,为什么查询不返回任何结果?

mysql - 如何使用 JPA 和 Hibernate 仅更新实体的几个字段?

属性文件中值的 Java validator 注释

Java:HTTP异步非阻塞远程日志服务器?

Java:卡住 JFrame 上的组件

java - 将 Spring MVC 与 CockroachDB 结合使用

json - Spring Security 和 JSON 身份验证

java - 扩展第三方现有的 JAXB 类

具有功能接口(interface)参数类型的 Java 通用方法

java - Hibernate 中的 ResultTransformer 返回 null