2011-10-18 1 views
1

Hibernate Validator 3.X에서 4.X로 업그레이드 한 후에 더 이상 DataIntegrityViolationException을 얻지 못하는 이유를 이해할 수 없다.Hibernate Validator 4로 업데이트 한 후 Spring의 DataIntegrityViolationException을 얻을 수 없다.

어떻게 든 봄은 지속성 레이어 예외를 더 이상 감쌀 수 없습니다.

유효성 검사기 종속성을 제외하고는 아무 것도 변경되지 않았지만 유효성 검사 위반이 발생하면 DataIntegrityViolationException이 throw됨을 확인하는 테스트가 더 이상 수행되지 않습니다. 이제 대신 javax.validation.ConstraintViolationException이 발생합니다.

물론 아직까지는 을 포함하여 모든 정보가 그대로 유지되지만 더 이상 번역이 이루어지지 않습니다.

도움을 환영합니다!

답변

3

JPA-2.0 사양에 따르면 JSR-303 유효성 검사 구현 (즉, Hibernate Validator 4.x)이 클래스 경로에있는 경우 엔터티를 지속하기 전에 JSR-303 유효성 검사가 자동으로 트리거됩니다.

당신의 엔티티는 Hibernate Validator에 의해 거부되고 데이터베이스에 들어 가지 않으므로 데이터베이스 무결성 제약이 위반되지 않고 DataIntegrityViolationException이 던져지지 않고 JSR-303의 ConstraintViolationException을 얻게됩니다.

당신은 당신의 persistence.xml

<validation-mode>NONE</validation-mode> 

를 추가하여이 기본 동작을 해제 할 수 있습니다.

0

그것은 내 마음을 아프게하지만, 당신은 옳다. 난 아직도, 대신 DataIntegrityViolationException 근본 원인 PropertyValueException을 얻기의 '검증'을 얻을 내가 검증을 끄면

, 난 기대하지 org.hibernate.exception.ConstraintViolationException 얻을 javax.validation.ConstraintViolationException 검증 2 종류를 사용할 수있다처럼

그래서 보인다 Hibernate Validator에 의해. 새 bean 검증에 의해 기본적으로 활성화 된 것은 'pre database'라는 것입니다. 하지만 어쨌든 <validation-mode>NONE</validation-mode>의 유무에 관계없이 내 기록에는 항상 검색어가 표시됩니다. 그것은 Hibernate 로깅 때문에 데이터베이스로 만들지는 못했지만, 실제로 무슨 일이 일어나고 있는지에 관해선 잃어 버렸습니다.

<validation-mode>NONE</validation-mode>없이 유효성 검사와 유효성 검사의 차이점은 무엇입니까? AFAIK에서 그걸 발견하지 못했습니다.