【问题标题】:Where and how handle spring+hibernate exceptions?在哪里以及如何处理 spring+hibernate 异常?
【发布时间】:2011-05-09 13:00:45
【问题描述】:

我将 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 管理异常的最佳做法是什么?

谢谢。

【问题讨论】:

    标签: java hibernate spring exception-handling


    【解决方案1】:

    我建议将抛出的异常包装在您自己的异常类中,并让它们冒泡到 GUI 层。

    【讨论】:

      【解决方案2】:

      如果你使用的是Spring MVC,那么有写ExcpetionHandlerResolver的解决方案,看看documentation

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

      【讨论】:

        猜你喜欢
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-03-04
        • 2014-11-02
        • 2019-06-04
        • 2013-02-07
        • 2011-06-09
        • 1970-01-01
        相关资源
        最近更新 更多