我正在从Hibernate实体生成DDL。一些实体正在使用JSR 303验证器注释(javax.validation.constraints.Max - 就是其中之一)。
使用Hibernate Tools 4.0.0 CR1 +相关的Ant任务生成DDL。
问题是所有文本列(即使它们可能受@Max(32)限制)都生成为VARCHAR(255)。我试图调试org.hibernate.tool.hbm2ddl.SchemaExport类(和相关的)。从我所看到的,在构造org.hibernate.cfg.Ejb3Column期间没有地方可以包含任何与Validator注释相关的逻辑。
我还尝试修改'hibernate.validator.apply_to_ddl'属性 - 没有任何成功。
任何提示都将不胜感激。
组件/库:
拉法尔
答案 0 :(得分:1)
hbm2ddl
不考虑JSR 303注释。从工具的角度来看,这种意义是有道理的。它为数据库生成“代码”(DDL),而JSR 303又称bean验证在JVM中运行。
要修复数据库中的大小,您需要设置JPA length
注释的@Column
属性。是的,你需要复制大小约束,但这就是它的方式很难看。
答案 1 :(得分:0)
hbm2ddl
确实考虑了一些Bean验证限制,即@NotNull
,@Size
,@Digits
和遗留@Length
约束由Hibernate Validator定义。
如果您没有看到Hibernate ORM发出的DDL中反映的约束,原因可能是:
AUTO
或DDL
。只有在这些模式下,约束才会传播到DDL