2013-04-16 4 views
2

일부 필드 (이름, 성, 도시 등)가있는 엔티티 개체가 있습니다. 한 가지 경우에이 객체에 하나의 제한 집합 (null, 길이 제한, 고유 등)을 적용해야하고, 다른 경우에는 다른 집합을 적용해야합니다. 현재로서는 다른 유스 케이스에 대해 다른 유효성 검사 방법을 가진 자체 validator를 사용하고 있습니다.Java 동적 유효성 검사

다른 방법으로 검증을 수행 할 수 있습니까 (표준 솔루션)?

나는 Spring with Hibernate를 사용한다. Hibernate에서 구현 된 JSR303 표준은 내 문제를 해결할 수 없다. 왜냐하면 주석은 정적 인 제한 집합 하나만 정의 할 수 있기 때문이다. 런타임에 다시 정의 할 수 없습니다.

+0

http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/programmaticapi.html를 찾을 수 있습니까? 또는이 http://stackoverflow.com/questions/397852/java-validation-frameworks? – Khanser

+0

@Khanser : 주석은 정말로 유용하지 않습니다. JSR303 유효성 검사기와 작성자가 이미 알고있는 Hibernate Validator의 목록을 가리 키기 만하면됩니다. 할 수 있는지 여부를 안다면이 도움이되지 않습니다. – philnate

답변

1

클래스 패스의 루트에 validation.xml 파일을 사용하여 배포시 Hibernate 유효성 검사기를 재정의 할 수 있습니다. 하나의 배포에만 필요하지만 하나의 유효성 검사 스키마가 필요한 경우 작동합니다. 자체 xml 파일로 각 배치를 빌드 할 수 있습니다.

반면에 필요한 유효성 검사가 응용 프로그램의 상태에 따라 다르면 상태에 따라 달라지는 유효성 검사기가 필요합니다. 유효성 검사 그룹이 도움이되지 않습니다. 다른 관련 엔티티 개체를 사용할 수 있습니까?

abstract class BaseEntity { 
    private String name; 
    public String getName() { return name;} 
} 

public class Entity1 extends BaseEntity { 
    @Override 
    @NotNull 
    @Length(min=2, max=20) 
    public String getName() { return super.getName();) 
} 

public class Entity2 extends BaseEntity { 
    @Override 
    @Length(min=2, max=10) 
    public String getName() { return super.getName();) 
} 

두 개의 관련 클래스에 목록이있는 경우이 작업을 수행했습니다. 하나는 목록에 적어도 두 가지 요소가 필요했습니다. 다른 하나는 목록이 비어 있거나 적어도 두 개의 요소가 필요합니다.

+0

Hibernate 엔티티가 데이터베이스 테이블에 매핑되기 때문에이 접근법을 사용할 수 없습니다. 시작시에 나는 테이블 복제물을 받게 될 것이지만 이것이 필요한 것은 아닙니다. – mvb13

3

Hibernate Validator를 사용하면 ConstraintMapping : http://docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/cfg/ConstraintMapping.html을 통해 프로그래밍 방식으로 제약 조건을 구성 할 수 있습니다. 문서는이 http://www.hibernate.org/subprojects/validator.html에 봤어

ConstraintMapping mapping = new ConstraintMapping(); 
mapping.type(Car.class) 
    .property("manufacturer", FIELD) 
     .constraint(NotNullDef.class) 
    .property("licensePlate", FIELD) 
     .constraint(NotNullDef.class) 
     .constraint(SizeDef.class) 
      .min(2) 
      .max(14) 
    .property("seatCount", FIELD) 
     .constraint(MinDef.class) 
      .value (2) 
.type(RentalCar.class) 
    .property("rentalStation", METHOD) 
     .constraint(NotNullDef.class); 
HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure(); 
config.addMapping(mapping); 
ValidatorFactory factory = config.buildValidatorFactory(); 
Validator validator = factory.getValidator();