2014-01-06 2 views
0

오브젝트 A가 필드 또는 특성에 @Valid 주석을 갖는 경우, 해당 필드 또는 특성은 오브젝트 A가 유효성이 확인 될 때 ​​유효성이 검사됩니다.메소드에 대한 @Valid 주석 (Java EE 6)

메소드에 @Valid가있는 코드를보고 있습니다. 첫 번째 질문은 여기가 재산에 대한 취득자라는 가정입니까?

@OneToOne 
@Valid 
public Contact getContact() { 
    return contact; 
} 

그래서, 항상가 연락처 개체의 유효성을 검사 위의 주석 객체 A가 검증 될 때

@Valid Contact contact;

내 두 번째 질문에 해당, 위의 일을? 연락처의 내용이 변경된 경우에도?

답변

1

빈 유효성 검사에서 일반적으로 속성 수준의 주석은 getter에 배치됩니다. 필드 또는 해당 JavaBeans getter 메소드에 주석을다는 것의 차이점은 후자의 경우 getter가 값을 얻기 위해 유효성 검사 엔진에 의해 호출되고 첫 번째 경우에는 필드 값이 직접 액세스되는 것입니다. getter가 추가 계산 등을 수행하면 차이가 발생할 수 있습니다.

예를 들어 부모 개체의 유효성을 검사 할 때 연결된 연락처의 유효성을 항상 확인하고 변경 사항이나 유사한 사항이 있는지 확인하지 않습니다.

+0

대답 해줘서 고마워요. 따라서 실제로 getContact() 메서드의 반환 값이 확인되고 있습니다. (이 시나리오에서) 유효성 검사가 시작될 때 약간 혼란 스럽습니다. getContact()가 호출 된 직후 또는 나중에 "유효성 검사"단계에서 반환 값의 유효성이 검사됩니까? .? – johnm

+0

일반적으로 유효성 검사는 수동으로 ('javax.validation.Validator'를 가져 와서 validateXy() 메소드 중 하나를 호출하여) 특정 이벤트에서 자동으로 트리거 될 수 있습니다. JSF 양식을 게시 할 때, 제한된 엔티티를 지속 시키거나 CDI 빈의 제한된 메소드를 호출 할 때. 그래서이 질문에 대답하기 위해 당신의 객체 사용법에 대한 좀 더 자세한 정보가 필요할 것입니다. 특히 JPA를 통한 수명주기 유효성 검증의 경우, 참조 된 엔티티에 대해 계단식으로 유효성 검증을 수행하지 않으며 각 엔티티는 지속될 때 자체적으로 유효성이 검증됩니다. – Gunnar