一尘不染

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

hibernate

我在桌面应用程序中使用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管理异常的最佳实践是什么?

谢谢。


阅读 172

收藏
2020-06-20

共1个答案

一尘不染

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

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

2020-06-20