====== JPA Validation ====== * [[https://www.logicbig.com/tutorials/java-ee-tutorial/jpa/bean-validation.html|JPA + Hibernate - Bean Validation integration in JPA]] * [[http://www.thejavageek.com/2014/05/27/jpa-bean-validation/|JPA Bean Validation - theJavaGeek]] * [[https://www.ibm.com/support/knowledgecenter/ko/SSAW57_9.0.0/com.ibm.websphere.nd.multiplatform.doc/ae/cdat_beanvaljpa.html|IBM Knowledge Center - JPA의 Bean 유효성 검증]] * [[https://beanvalidation.org/proposals/BVAL-234/|Bean Validation - Fix annoyance between JPA and Bean Validation when @Id @GeneratedValue and @NotNull are used]] * [[https://www.thoughts-on-java.org/automatically-validate-entities-with-hibernate-validator/|How to automatically validate entities with Hibernate Validator]] ====== 설정 ====== * [[https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/additionalmodules.html#d0e3875|Chapter 4. Additional modules # Bean Validation]] * ''javax.persistence.validation.mode'' : [[https://docs.oracle.com/javaee/6/api/javax/persistence/ValidationMode.html|ValidationMode]]''CALLBACK''이나 ''NONE'' 중 에 하나로 항상 명시할 것. * ''AUTO''가 Default 이며, [[java:validation|Java Validation]] 구현체가 존재하면 자동 활성화 된다. ====== 위반시 Exception 분석 ====== * validation 실패시에 ''RollbackException''에 실제 위반 사항이 들어가 있다. try { em.getTransaction().commit(); Assert.fail(“ConstraintViolationException exptected”); } catch (RollbackException e) { // getCause()가 실제로 ValidationConstraintException 인지 여부를 확인해야한다. 안그러면 Cast exception이 발생할 수 있다. Set> violations = ((ConstraintViolationException)e.getCause()).getConstraintViolations(); for (ConstraintViolation v : violations) { log.info(v); } }