2013-08-20 3 views
2

두 개의 @Entity bean이 있습니다. Bean one은 두 번째 것의 "one to many"입니다. Bean1과 Bean2는 JSR303 다른 주석 유효성 검사기를 가지고 있습니다.지속성 이전에 Hibernate로 검증 된 내부 @Entity 클래스의 Spring BindingResult 예외 처리 방법

@Entity 
class Bean1 { 
    @OneToMany 
    private List<Bean2> var; 

    //other fields marked with JSR303 
} 

@Entity 
class Bean2 { 
    //other fields marked with JSR303 
} 

내 작업은 내부 Bean2의 유효성을 검사하는 것입니다. 모든 먼저 나는 @Validated bean1을

@Controller 
class Controller { 
    public String methodPOST(@Validated Bean1 bean1, BindingResult errors) 
} 

최대 절전 모드가 자동으로 DB에 지속하기 전에 JSR303 유효성을 검사와 컨트롤러가 있습니다. 따라서 Bean2에서 유효성 검사 예외가 없기 때문에 Spring이 처리하지 못하고 Hibernate가 throw합니다.

DTO 빈과 같은 것을 생성하고 유효성을 검사 할 수 있으며, 내부 Bean2DTO는 @Valid로 표시하면 유효성이 검사되고 Hibernate 측에서는 예외가 발생하지 않습니다. 왜냐하면 지속성 전에 유효성 검사가 없기 때문입니다. 또한이 경우 Controller 메서드에 BindingResult가 채워질 것입니다.

위의 두 가지 옵션없이 Hibernate org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate (..)에서 내 BindingResult로 던져지는 javax.validation.ConstraintViolationException을 얻기위한 해결책이 있습니까?

또한, 논리의 다른 양이 손상되어서 지속성을 유지하기 전에 최대 절전 모드 자동 유효성 검사를 비활성화 할 수 없습니다.

감사합니다.

답변

2

가능한 복제 (즉 또한 JSR을 가지고 있다고 가정 here

당신은 또한 봄에 중첩 된 유효성 검사를 트리거해야 @Valid

@Entity 
class Bean1 { 
    @OneToMany 
    @Valid 
    private List<Bean2> var; 

    //other fields marked with JSR303 
} 

@Entity 
class Bean2 { 
    //other fields marked with JSR303 
} 

하여 중첩 된 속성을 주석을 필요로 정리해 볼 수 있습니다 -303 유효성 검사기가 구성됨).

+0

하이버 네이트는 항상 영속되기 전에 유효성 검사를하기 때문에 유효 주석이 존재하는지 여부는 문제가되지 않는다. 위에서 설명한 바와 같이 유효 또는 무효로 같은 예외를 던질 것이다. –

+0

내가 가진 문제가 발견되었습니다. 지정한 그룹에 대해 유효성 검사 주석을 사용했으며 Validated에 지정된 그룹의 유효성을 검사하기 때문에 유효 주석이 작동하지 않습니다. 제안 아이디어에 큰 감사드립니다! –