@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 개의 관련 개체)의 경우를 다루지 않을 것입니다.
아이디어가 있으십니까? 그와 관련된 경험이 있습니까?