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 に答える