2013-07-15 1 views
0

JEE6 자습서 (http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html)는 JSR-303/Bean 유효성 검사가 입력의 유효성 검사에 사용되어야한다고 제안합니다.Hibernate 속성 유효성 검사를 위해 데이터베이스에 의존해야합니까?

그럼에도 불구하고 @NotNull과 같은 일부 Bean 유효성 검사 주석은 인터페이스 유효성 검사 수준에서는 유용하지 않지만 지속성 수준에서는 유용하지 않을 수 있습니다.

예를 들어, 다음과 같은 엔티티 고려 :이 경우

public class Registry { 

    @NotNull 
    String userName; 

    @NotNull 
    Date createdAt; 
} 

을, 사용자 이름이 사용자 자신에 의해 작성되는 형태가있다. 그러나 나는이 레지스트리가 만들어진 날짜를 사용자가 알기를 원하지 않는다. 내 백엔드가 서버의 현재 날짜를 설정하도록합니다.

그래서 일반적으로이 객체를 페이지의 양식에 바인딩하고 @Valid를 사용하여 JSR-303 유효성 검사를 수행합니다. 하지만 사실은 : Bean Validation에 의해 유효성이 검증되기 위해서는 "createdAt"를 작성하지 않았기 때문에, 엔터티가 Hibernate에 의해 영속화 될 때만 유효성을 검사하기를 원합니다. 그러나 Bean 유효성 검사를 사용하면 두 속성 모두 양식 요청시 유효성이 검증됩니다.

어떻게 해결할 수 있습니까? JSR-303은 그런 시나리오에서 작동할까요? "createdAt"속성에 대한 데이터베이스 nullable 필드 유효성 검사에 의존해야합니까?

이 게시물 같은 문제에 대한 꽤 많은,하지만 난이 중 어떤 답을 발견하지 않았습니다 : 다른 validation groups에 제약을 지정 및 양식 제출에 한 그룹을 확인 Validation where to organize in web app for more efficient way

답변

1

(예 : 기본 그룹) 및 검증 그룹 PrePersist 사전 지속 (예 :시, 다른 하나

@interface PrePersist {} 

public class Registry { 

    @NotNull 
    String userName; 

    @NotNull(groups = PrePersist.class) 
    Date createdAt; 
} 

그룹을 지정 중에 사용되는 당신의 persistence.xml이 같은 사전 지속 :

<persistence ...> 
    <persistence-unit ...> 
     ... 
     <properties> 
      <property 
       name="javax.persistence.validation.group.pre-persist" 
       value="com.example.PrePersist"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

cool! 나는 그것을 시도 할 것이다! 감사! – felipecao