선호하는 접근 방식은 클래스 속성이 올바른지 확인하기 위해 JSR 303 (Bean 유효성 검사 API)을 사용하는 것입니다.
setter에서 유효성 검사를 수행하는 것은 꽤 괜찮은 방법이지만 항상 바람직한 방법은 아닙니다. 서로 관련이없는 여러 컨텍스트의 요구를 혼합 할 가능성이 있습니다. 예를 들어, 일부 속성은 사용자 인터페이스에서 설정하면 안되며 대신 지속되기 전에 서비스에 의해 계산됩니다. 그런 경우 setter 내부에서이 논리를 사용하는 것은 바람직하지 않습니다. setter가 호출되는 컨텍스트를 알아야하기 때문입니다. UI 레이어와 지속성 레이어에 다른 규칙을 적용해야합니다. JSR 303에서는 유효성 검사 그룹을 사용하여 이러한 우려를 분리 할 수 있으므로 UI 유효성 검사 그룹이 지속성 유효성 검사 그룹과 다릅니다.
JPA 2.0, 당신은 JSR 303 검사기에 의해 평가되는 제약 조건을 사용하여 클래스에 주석을 때, 당신의 영속 공급자가 자동으로
PrePersist
,
PreUpdate
및
PreRemove
에 이러한 제약 (일반적으로하지, 아래 참조) 평가할 수에서
의 라이프 사이클 이벤트를 엔티티. JPA 공급자의 엔티티 유효성 검사를 수행하려면 파일에 validation-mode
요소 또는 javax.persistence.validation.mode
속성을 지정해야합니다. 값은 AUTO
(기본값) 또는 CALLBACK
(NONE
아님)이어야합니다.
기본값은 AUTO
이므로 JPA 엔티티 라이프 사이클 이벤트에 대해 유효성 검증을 수행하기 위해서는 Bean 유효성 검증 제공자가 있어야 충분합니다. Java EE 6 응용 프로그램 서버에서이 값을 기본적으로 가져옵니다. Glassfish는 Hibernate Validator 인 JSR 303의 RI 구현을 사용하며 EclipseLink에서도 잘 작동합니다.
CALLBACK
모드에서는 라이프 사이클 이벤트가 트리거 될 때 적용 할 유효성 검사 그룹을 대체 할 수 있습니다. 기본적으로 기본 Bean 유효성 검사 그룹 (Default
)은 업데이트 및 지속성 이벤트에 대해 유효성 검사가 수행됩니다. remove 이벤트에는 유효성 검사가 필요하지 않습니다. CALLBACK
모드에서는 javax.persistence.validation.group.pre-persist
, javax.persistence.validation.group.pre-update
및 javax.persistence.validation.group.pre-remove
속성을 사용하여 이러한 이벤트에 대해 다른 유효성 검사 그룹을 지정할 수 있습니다.
위에서 게시 한 Bean Validation API 문서 링크는 Java EE 6 API 설명서의 것이지만 JSR 303 유효성 검사는 Java EE 컨테이너 외부에서 사용할 수 있습니다.
고마워요! 귀하의 도움을 많이 주셔서 감사 드리며 다른 접근법에 대해 알고 기뻐합니다. – VaclavDedik
당신은 환영합니다 :) –