최대 절전 모드 엔티티에서 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 최종본
라팔
그러나 @Length와 같은 Hibernate Validator 주석도 무시합니다. 그리고 이전의 설정에서 : Hibernate 3.3.2 + Hibernate Tools 3.4.0 그것은 잘 동작했습니다. 어떤 아이디어? –
'@ Length'는 Hibernate가 소유하지 않은 JPA 주석입니다. 그것은 두 개의 표준'@ Min' /'@ Max' 주석에 대한 간단한 지름길입니다. 맞습니까? 나는'hbm2ddl'이 이것을지지한다고해도 놀랄 것입니다.하지만 그렇게 말하면 ...어쨌든, 유일하게 신뢰할 수있는 AFAIK 옵션은'@ Column # length'입니다. –
Marcel - 그래, 우리가 Hibernate (core + tools + validator) 버전을 업그레이드했고 생성 된 DDL이 더 이상 텍스트 열의 길이를 올바르게 설정하지 않아서 작동했는지 확신 할 수 있습니다. 새로운 버전의 Hibernate에서 Hibernate Validator를 완전히 다른 초기화로 가정 할 수 있습니다 (아마도 JSR 303 지원으로 인해). Hibernate의 메타 데이터는 여전히 업데이트되고 (제약 조건 기반으로), SessionFactory가 생성 될 때 실행되는 org.hibernate.cfg.beanvalidation.TypeSafeActivator 클래스의 수단에 의해 발생한다. 어쨌든 - 도와 줘서 고마워. 건배! –