当前位置: 首页 > 面试题库 >

在哪里以及如何处理spring + hibernate异常?

公良玺
2023-03-14
问题内容

我在桌面应用程序中使用spring + hibernate。

我正在尝试使用分层实现来构建它,所以我有:

GUI层–call- >服务层–call-> DAO层

一个更好地说明我的情况的小例子:

// In GUI layer
private void actionPerformed(ActionEvent evt){
    addUser();
}

private void addUser(){
    // Check gui validation for user inputs
    if(inputIsValid()){
        String username=nameText.getText();
        String pass=passText.getText();
        //Now call service layer
        userService.createUser(username, pass);
        // Now here i want to show a message to user like
        // "Operation successful" or "Operation failed"
        // or more sofisticated message like "User with same name already exists"
    }
}


// Service layer
@Transactional
public void createUser(String name, String pass){
    User user=new User(name, pass);
    userDao.save(user);
}

// Another service layer example, 
@Transactional
public boolean createUser(String name, String pass){
    User user=new User(name, pass);
    try{
        userDao.save(user);
    }
    catch(Exception ex){
        Log(ex);
        return false;
    }
    return true;
    // In this case GUI layer can know if save is succesful, but it can't know WHY
    // the save is failed : some username? DB service shutdown? etc..
}

问题是:谁抛出异常并由谁处理?

我认为DAO必须抛出第一个异常,然后服务层将其抛出,最后GUI层处理该异常,这样我才能向用户显示消息,这很好吗?有没有一种方法可以使用spring构建一些ExceptionHandler?

使用spring + hibernate管理异常的最佳实践是什么?

谢谢。


问题答案:

如果您使用的是Spring
MVC,那么有一种解决方案,ExcpetionHandlerResolver请看一下文档上的内容

如果您不使用Spring MVC。我建议将异常从DAO抛出到Service,然后到View层。只有视图层才能根据捕获到的异常向用户真正提供有价值的信息。



 类似资料:
  • 我正试图决定如何处理猫鼬中的验证错误。 我使用节点验证器定义了自己的验证规则,例如: 这将产生如下错误: 然而,节点验证器提供了自己的错误消息。如果我使用mongoose validator节点模块将节点验证器直接插入到我的模式中,那么我可以直接使用这些错误消息: 这将生成一条错误消息,如下所示: 我也可以在此处提供自定义错误消息: Mongoose允许您根据需要定义字段: 这将生成一条错误消息,

  • 问题内容: 我正在阅读一些有关Java中异常处理的内容,以便能够编写更好的代码。好吧,我承认,我有罪。我使用了太多try-catch {}块,在捕获中使用了它,甚至没有使用适当的记录器(实际上是和被重定向到,因此生成了日志)。但是,经过几个小时的阅读,我发现自己在一个陌生的地方:未知。如果异常被设计为传递有关异常流状态的信息,那么人们如何知道WHERE是使用该信息执行操作的适当级别? 例如,当发生

  • 如果传入的请求是AJAX请求,则不会生成重定向。相反,带有422状态码的HTTP响应将返回到浏览器,其中包含验证错误的JSON表示。 这不管用!我试图通过ajax请求访问路由,它会重定向回来。 如果验证通过,代码将继续正常执行。但是,如果验证失败,将抛出一个Illumate\合同\验证\验证异常。自动捕获此异常,并生成重定向到用户先前的位置。验证错误甚至会自动Flink到会话! 现在我想知道lar

  • 问题内容: 我是Angular 4的新手,所以谁能解释在Angular 4中的使用方式和位置? 实际上,我想从父组件覆盖子组件的某些CSS属性。此外,它在IE11上受支持吗? 问题答案: 通常, 可使用组合器将样式强制降低到 。这个选择器有一个别名>>>,现在还有另一个叫做:: ng-deep的别名。 由于 已弃用,建议使用 例如: 和 它将应用于子组件

  • 我搜索了很多,几乎所有我发现的例子都使用了控制器中的异常处理和自己的异常处理程序。我一直认为这应该在程序的服务层上完成。如果不是,我真的不明白为什么要创建单独的服务层。 另外,如果我在Controller中实现异常处理,是否意味着我必须在前面的所有层中抛出异常?

  • 问题内容: 我需要将JNDI名称添加到hibernate中的活动连接池的代码。我已经在Jboss服务器中将连接池配置为JNDI名称为“ EmployeeDB” 如何在hibernate.cfg.xml中配置它? 如果我使用的是Hibernate 4 Final版本,请给我hibernate.cfg.xml的代码。 问题答案: 在Jboss服务器中配置的数据源JDNI名称由属性指定。 基本应如下所示