处理spring + hibernateexception的地方和方式?

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

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

GUI层 – 调用 – >服务层 – 调用 – > 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.. } 

问题是:谁抛出exception并处理它?

我认为DAO必须抛出第一个exception,并且服务层重新抛出它,最后GUI层处理exception,所以我可以向用户显示消息,这个好吗? 有一种方法可以使用spring构建一些ExceptionHandler吗?

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

谢谢。

如果您正在使用Spring MVC,那么有一个编写ExcpetionHandlerResolver的解决方案,请查看文档

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

我建议在你自己的exception类中包装抛出的exception并让它们冒泡到GUI层。