2012-11-07 2 views
0

@Transient@NotNull으로 표시된 필드에서 최대 절전 유효성 검사기를 사용한 유효성 검사가 실패합니다. 그러나 DB에 이미 저장되어있는 객체에 대해서만 실패하지만 이제는 객체 트리에서 이동합니다. 이 같은 엔티티를 들어jpa로 hibernate 유효성 검사기, 전이 @Transient @NotNull 필드에 대한 위반

(자신의 값으로 물론 널) :

public class User { 

    @ManyToMany 
    @Fetch(org.hibernate.annotations.FetchMode.JOIN) 
    @Valid 
    private Set<Role> roles; 

    @NotNull 
    private String someField; 
} 

public class Role { 

    @ManyToMany 
    @Fetch(org.hibernate.annotations.FetchMode.JOIN) 
    @Valid 
    private Set<User> users; 
} 

나는 User의 검증을하고 특정 Role 더 많은 사용자 내가 문제가 있기 때문에 그조차 경우 현재 사용자 유효성 검사가 성공하고 다른 사용자에게는 오류가 발생합니다.

서버 측에 데이터를 제출할 때 클라이언트 쪽에서이 유효성 검사를 수행합니다.

그러나 이러한 내 경우에는 적용되지 않았다

나는 @Transient의 검증 및 @NotNull 문제를 해결하는 방법을 몇 가지 아이디어를 보았다 (관련 객체에 대한 위반이 있음). 게다가 서버 측에서는 검증 문제에 아직 오지 않았다. :) 테스트는 다음 단계가 될 것입니다.

그렇다면 유효성 검사기를 설명 할 방법이 있습니까? DB에서 가져온 전이 객체를 유효성 검사 중에 건너 뛰는 것이 좋습니다.

나는 재정 의하여 나는 현재 사용 JPATraversableResolver을 확장하는 생각을했다 :

/** 
    * Determine if the Bean Validation provider is allowed to reach the property state 
    * 
    * @param traversableObject object hosting <code>traversableProperty</code> or null 
    *       if validateValue is called 
    * @param traversableProperty the traversable property. 
    * @param rootBeanType type of the root object passed to the Validator. 
    * @param pathToTraversableObject path from the root object to 
    *  <code>traversableObject</code> 
    *  (using the path specification defined by Bean Validator). 
    * @param elementType either <code>FIELD</code> or <code>METHOD</code>. 
    * 
    * @return <code>true</code> if the Bean Validation provider is allowed to 
    *   reach the property state, <code>false</code> otherwise. 
    */ 
    boolean isReachable(Object traversableObject, 
        Path.Node traversableProperty, 
        Class<?> rootBeanType, 
        Path pathToTraversableObject, 
        ElementType elementType); 

그러나 나는 아직도 확인하는 없습니다 수있는 속성 결정의 문제에 직면하고 있습니다. 내 검사가 현재 지속 된 개체의 일시적인 필드에 대한 것이면, 나는 검사 중 하나에있을 것이고 다른 하나는 문제가있는 일시적인 필드를 갖는 영속 개체 (2 개의 관련 개체)의 경우를 다루지 않을 것입니다.

아이디어가 있으십니까? 그와 관련된 경험이 있습니까?

답변

0

확인, 어떤 제안이 오지로, 내가 직접 여전히

내가 transient 필드에 특별한 검증 그룹을 갖는 결국,이 그룹에 대해 그냥 확인 별도의 TraversableResolver을 구현, 나는 나 자신을 :) 대답하자 확인 된 엔티티?

이것은 체크인을 통해 수행됩니다. TraversableResolver.isReachable 여기서 pathToTraversableObject은 빈 Strnig가 확인됩니다.

이유는 유효성 검사가 필요한지 아닌지 (수정할 수 있는지 여부)를 결정할 수 없었기 때문에 관련 엔터티를 확인할 수 없었기 때문입니다. 하지만 제가 제출하는 것은 확실한 검증이 필요합니다.

관련 문제