2013-05-27 1 views
1

최대 절전 모드 엔티티에서 DDL을 생성 중입니다. 엔티티 중 일부는 JSR 303 유효성 검사기 주석 (javax.validation.constraints.Max - 그 중 하나임)을 사용하고 있습니다.JSR 303 기반의 엔티티에서 DDL 생성 Validator annotations

DDL은 Hibernate Tools 4.0.0 CR1 + 관련 Ant 태스크를 사용하여 생성됩니다.

문제는 모든 텍스트 열은 @Max (32)로 제한 될 수 있지만 VARCHAR (255)로 생성된다는 것입니다. 나는 org.hibernate.tool.hbm2ddl.SchemaExport 클래스를 디버깅하려고 시도했다. 필자가 보았던 것부터, Validator 주석과 관련된 로직을 포함하는 org.hibernate.cfg.Ejb3Column을 생성하는 동안 어떠한 장소도 없다.

또한 'hibernate.validator.apply_to_ddl'속성을 수정하려고 시도했지만 성공하지 못했습니다.

힌트를 주시면 감사하겠습니다.

부품/도서관 :

  • JDK 6
  • 최대 절전 모드 검사기 4.3.0 최종
  • 최대 절전 모드 커먼즈 주석 4.0.2 최종
  • 최대 절전 모드 코어 4.2.2 최종
  • Hibernate 엔티티 관리자 4.2.2 최종본

라팔

답변

1

hbm2ddl JSR 303 주석을 고려하지 않았습니다. 그런 종류의 도구는 도구의 관점에서 의미가 있습니다. JSR 303은 bean 검증이 JVM에서 작동하는 동안 데이터베이스의 "코드"(DDL)를 생성합니다.

데이터베이스의 크기를 고정하려면 JPA @Column 주석의 length 속성을 설정해야합니다. 예, 크기 제약 조건을 복제해야하지만보기에는 엉망입니다.

+0

그러나 @Length와 같은 Hibernate Validator 주석도 무시합니다. 그리고 이전의 설정에서 : Hibernate 3.3.2 + Hibernate Tools 3.4.0 그것은 잘 동작했습니다. 어떤 아이디어? –

+0

'@ Length'는 Hibernate가 소유하지 않은 JPA 주석입니다. 그것은 두 개의 표준'@ Min' /'@ Max' 주석에 대한 간단한 지름길입니다. 맞습니까? 나는'hbm2ddl'이 이것을지지한다고해도 놀랄 것입니다.하지만 그렇게 말하면 ...어쨌든, 유일하게 신뢰할 수있는 AFAIK 옵션은'@ Column # length'입니다. –

+0

Marcel - 그래, 우리가 Hibernate (core + tools + validator) 버전을 업그레이드했고 생성 된 DDL이 더 이상 텍스트 열의 길이를 올바르게 설정하지 않아서 작동했는지 확신 할 수 있습니다. 새로운 버전의 Hibernate에서 Hibernate Validator를 완전히 다른 초기화로 가정 할 수 있습니다 (아마도 JSR 303 지원으로 인해). Hibernate의 메타 데이터는 여전히 업데이트되고 (제약 조건 기반으로), SessionFactory가 생성 될 때 실행되는 org.hibernate.cfg.beanvalidation.TypeSafeActivator 클래스의 수단에 의해 발생한다. 어쨌든 - 도와 줘서 고마워. 건배! –

0

hbm2ddl@NotNull, @Size, @Digits 몇 콩 검증 제약 조건 및 최대 절전 모드 검사기에 의해 정의 된 기존 @Length 제약 조건을 고려 않습니다. 당신은 최대 절전 모드 ORM에 의해 방출되는 DDL에 반영 제약이 표시되지 않는 경우

이유가 될 수있다 :

  • 당신은 클래스 패스에 콩 검증 제공자 (예 : 최대 절전 모드 검사기 등)이없는; Hibernate ORM이 제약 조건 메타 데이터를 얻기 위해 실제 유효성 검사 팩토리를 부트 스트랩하기 때문에, Bean Validation API JAR만으로는 충분하지 않다.
  • 유효성 검사 모드 AUTO 또는 DDL을 사용하고 있지 않다. 이러한 모드에서만 제약 조건이 DDL에 전달됩니다.
관련 문제