0

我故意在 DAO 方法中将电子邮件设置为 null。它转到 DAO 类中持久方法中的异常块,我在自定义异常类中放置自定义错误消息“无法添加员工”;如何在控制器中捕获该错误消息。如果我使用 e.getMessage() 在控制器异常块中获取整个消息,但我只想要自定义错误消息。

调用方法(控制器)


try {                  
    employeeDao.persist(employees);
}  
catch (SpringUtilException ex) {    
    System.out.println("..at line 87......."+ex.getErrorMessage());
}
catch (Exception e) {
    System.err.println("Exception returned message: " + e.getMessage());
}

被调用方法(DAO)


public void persist(Employees employee) throws SpringUtilException {
    try {
        employee.setEmail(null);
        em.persist(employee);
    } 
    catch (EntityExistsException e) {
        throw new SpringUtilException(e, "Employee Duplicate");
    } 
    catch (Exception ex) {
        System.out.println("at line 31 in DAO..");
        throw new SpringUtilException("Failed to add Employee"); 
    }
}
4

1 回答 1

0

em.persist()只是使瞬态实体持久化。它不发出任何插入语句。

导致您获得异常的插入语句在刷新时发出。并且刷新是在事务结束时完成的(在这种情况下),此时 DAO 方法已经返回。

不要依赖数据库约束来验证您的对象。persist()明确地验证它们,如果实体无效,甚至不要调用。数据库约束是最后的检查。

于 2012-06-20T10:20:28.237 回答