2017-12-29 55 views
1

현재 주석에 정의 된 제약 조건의 발생에 대해 StackTrace를 검사하여 javax.persistence.PersistenceException을 처리합니다.스프링 데이터 JPA와 최대 절전 모드 : 데이터베이스 제약 조건에 대한 예외 처리

더 좋은 방법으로 문제를 해결할 수 있습니까?

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

실제로 컨트롤러 기반 제외 처리는 위반 (필드 등)에 대한 자세한 정보가 포함 된 사용자 지정 개체를 반환합니다. 요점은 데이터베이스 오류 메시지를 사용자 친화적 인 오류 메시지에 가장 잘 맵핑하는 방법입니다. – dev