基于JSR 303 Validator注解从实体生成DDL



我正在从Hibernate实体生成DDL。一些实体正在使用JSR 303验证器注释(javax.validation.constraints)。Max -是其中之一)。

DDL是使用Hibernate Tools 4.0.0 CR1 +相关Ant Task生成的。

问题是所有的文本列(即使它们可能受到@Max(32)的限制)都被生成为VARCHAR(255)。我已经尝试调试org.hibernate.tool.hbm2ddl。SchemaExport类(以及相关的)。从我所看到的,在org.hibernate.cfg的构建过程中没有地方。Ejb3Column,它将包含与Validator注释相关的任何逻辑。

我也试图修改'hibernate.validator。Apply_to_ddl’属性-没有任何成功。

如有任何提示,不胜感激。

组件/库:

    JDK 6
  • Hibernate验证器4.3.0 FinalHibernate Commons Annotations 4.0.2 Final Hibernate Core 4.2.2 Final
  • Hibernate实体管理器4.2.2 Final
Rafal

hbm2ddl不考虑JSR 303注释。从工具的角度来看,这是有道理的。它为数据库生成"代码"(DDL),而JSR 303又名bean验证在JVM中操作。

要在数据库中固定大小,需要设置JPA @Column注释的length属性。是的,你需要复制大小约束,这很难看,但这就是它的方式。

hbm2ddl 考虑了一些Bean验证约束,即@NotNull, @Size, @Digits和Hibernate Validator定义的遗留@Length约束。

如果没有看到Hibernate ORM发出的DDL中反映的约束,原因可能是:

  • 在类路径上没有Bean验证提供程序(如Hibernate验证器);仅仅Bean Validation API JAR是不够的,因为Hibernate ORM引导了一个实际的验证工厂来获取约束元数据
  • 您没有使用验证模式AUTODDL。只有在这些模式下,约束才会传播到DDL

相关内容

  • 没有找到相关文章

最新更新