2017-12-29 39 views
1

は現在、私は、アノテーションで定義された制約名の発生のためのスタックトレースチェックすることにより、javax.persistence.PersistenceExceptionを扱います。は春データJPAやHibernateは:データベースの制約のために例外処理は

は、問題を解決するために任意のよりエレガントな方法はありますか? ConstraintViolationExceptionが私にプロパティ名と制約で定義されたメッセージを与えるよう

春の検証は、それは非常に簡単になります。

+0

号には、データベース製品に依存しています。どのデータベースを使用していますか? –

+0

私は現在、テストにH2を使用しています。後のMySQLまたはPostgresしかし、私はそれをデータベースの実装から独立させたいと思っています。私はほとんどのデータベースが少なくとも違反した制約の名前を返すだろうと思う。 – dev

+0

通常、意味のある名前がある場合はあります。しかし、最後に実装では、カスタムとにかく –

答えて

0

あなたはコントローラベースの例外処理を使用することができます。あなたは制約違反に何を得るのメッセージので https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc#controller-based-exception-handling

@ResponseStatus(value=HttpStatus.CONFLICT, 
        reason="Data integrity violation") // 409 
    @ExceptionHandler(DataIntegrityViolationException.class) 
    public void conflict() { 
    // Nothing to do 
    } 
+0

である私は実際には違反(フィールドなど)に関する詳細な情報を含むカスタムオブジェクトを返すコントローラベースのExcptionハンドリングを使用しています。私の質問のポイントは、データベースエラーメッセージを使いやすいエラーメッセージに最適にマッピングする方法です。 – dev

関連する問題