2017-02-17 1 views
0

문제 : ConstraintValidator 예외가 발생하지 않고 ID 만 필요로 할 때 중첩 개체로 개체 계정을 저장하는 방법?Hibernate에서 같은 엔티티에 다른 유효성 검사 규칙을 사용하는 방법?

문제는 클래스에 유효성 검사 규칙을 설정했기 때문에 sem 엔티티를 중첩 된 객체로 저장하려고 할 때 일부 속성 값이 누락되었다는 예외가 발생합니다. 그래서 내가 다른 유효성 검사 규칙을 가질 때 나는 전체 개체를 유지하고 싶을 뿐이다. 오직 중첩 된 객체만을 사용할 때 (ID 만 필요할 때). 난 그냥 (계정 엔티티가 DB에 이미) ID는 FK로 사용할 수 있어야합니다 중첩 된 객체로 계정을 포함하는 경우

public class Account { 
    private int id; 

    @NotNull 
    private String name; 

    @NotNull 
    private String lastName; 

    @NotNull 
    private String userName; 
    //getters&setters 

는 @NotNull 주석의 난 예외를 얻을 수 있지만 때문이다.

Shop에서 객체 주석을 저장하려고 할 때 Account의 주석을 무시하는 방법이 있습니까? 또는 Account에 대한 다른 유효성 검사 규칙을 만드는 방법으로 유효성을 검사 할 수 있습니다.

public class Shop { 
    private int id; 

    private Account owner; // only ID is needed 

기본적인 예가 있습니까? 나는 문서에있는 것을 이해하지 못합니다. 나는 이미 여기에 게시하기 전에 설명서를 읽었습니다.

답변

1

특정 유효성 검증을 분류 할 수있는 Bean 유효성 검증 그룹을보고 싶습니다. 특정 유효성 검증은 해당 그룹이 유효성이 검증되었을 때만 활성화되고 그렇지 않으면 유효성 검증됩니다.

자세한 내용은 here 문서를 참조하십시오. 문서에서 예를 촬영

:

// This is just a stub interface used for tagging validation criteria 
public interface DriverChecks { 
} 

// The model 
public class Driver { 
    @Min(value = 18, message = "You must be 18", groups = DriverChecks.class) 
    private int age; 
    // other stuffs 
} 

그룹은 당신이 실행시 특정 사용 사례를 기반으로/비활성화 검증을 가능하게 할 수있는 태그에 불과하다. 빈 유효성 검사 주석에 groups 특성을 지정하지 않으면 유효성 검사시 그룹 태그가 지정되지 않은 경우 Bean 유효성 검사가 사용하는 Default 그룹이 기본적으로 사용됩니다. 다음을 의미한다

사실이 보유 : 당신이 당신의 서비스 메소드 내부의 검증 자신을 트리거 할 때 수동으로 그 방법의 사용 사례에 따라 적용 할 수있는 그룹 검사를 제어 할 수 있기 때문에 이것은 좋은 작품

// Age won't be validated since we didn't specify DriverChecks.class 
validator.validate(driver); 

// Age will be validated here because we specify DriverChecks.class 
validator.validate(driver, DriverChecks.class); 

.

bean 검증을 트리거 할 수있는 Hibernate ORM의 이벤트 리스너와 직접적으로 통합되는 경우, 그룹 스펙은 hibernate에 의해 발생 된 이벤트 유형에 기반하여 지정되어야하기 때문에 조금 더 어려워진다.

당신이 최대 절전 모드로 제공되는 JPA 속성에서 지정할 수 있습니다 위의 각 속성에 대한
javax.persistence.validation.group.pre-persist 
javax.persistence.validation.group.pre-update 
javax.persistence.validation.group.pre-remove 

, 당신은 그 이벤트 유형 각각에 대해 검증 할 수있는 그룹의 쉼표로 구분 된 목록을 나열 할 수 있습니다. 이렇게하면 삽입 대 업데이트 대 제거 중 다양한 검사를 수행 할 수 있습니다.

충분하지 않은 경우에는 항상 고유 한 유효성 검사기 구현 및 주석을 만들어 Bean 유효성 검사에 연결하고 클래스 또는 속성 수준에서 지정할 수 있습니다.

일반적인 필드별로 유효성 검사가 충분하지 않기 때문에 유효성을 암시하기 위해 여러 필드의 값을 일치시켜야하는 경우에 유용합니다.

+0

기본 예가 있습니까? 나는 문서에있는 것을 이해하지 못합니다. 나는 이미 여기에 게시하기 전에 설명서를 읽었습니다. – AndroidTank

+0

더 선명하게 추가되었습니다. 필자는 사용자 정의 제약 조건 유효성 검사기를 정확하게 작성하는 방법에 대해 설명하지 않았지만 문서가 명확하다고 믿습니다. – Naros

관련 문제