【问题标题】:Generate DDL from Entities basing on JSR 303 Validator annotations基于 JSR 303 Validator 注解从实体生成 DDL
【发布时间】:2013-05-27 11:58:49
【问题描述】:

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

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

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

我还尝试修改“hibernate.validator.apply_to_ddl”属性 - 没有任何成功。

任何提示将不胜感激。

组件/库:

  • JDK 6
  • 休眠验证器 4.3.0 最终版
  • Hibernate Commons Annotations 4.0.2 最终版
  • Hibernate Core 4.2.2 最终版
  • 休眠实体管理器 4.2.2 最终版

拉法尔

【问题讨论】:

    标签: hibernate ant


    【解决方案1】:

    hbm2ddl 不考虑 JSR 303 注释。从工具的角度来看,这是有道理的。它为数据库生成“代码”(DDL),而 JSR 303 又名 bean-validation 在 JVM 中运行。

    要修复数据库中的大小,您需要设置 JPA @Column 注释的 length 属性。是的,您需要复制大小约束很丑陋,但就是这样。

    【讨论】:

    • 但它也忽略了 Hibernate Validator 注释,比如@Length。在我之前的配置中:Hibernate 3.3.2 + Hibernate Tools 3.4.0 它工作得很好。有什么想法吗?
    • @Length 是 Hibernate 专有的非 JPA 注释。这是两个标准@Min/@Max 注释的简单快捷方式,对吧?如果hbm2ddl 曾经支持过,我会感到惊讶,但如果你这么说......无论如何,AFAIK 唯一可靠的选择是@Column#length
    • Marcel - 是的,我很确定它确实有效 - 因为我们升级了 Hibernate 版本(核心 + 工具 + 验证器)并且生成的 DDL 不再正确设置文本列的长度。我只能假设这是由于新版本的 Hibernate 中 HIbernate Validator 的初始化完全不同(可能是由于对 JSR 303 的支持)。 Hibernate 的元数据仍然会更新(基于约束),但它是通过 org.hibernate.cfg.beanvalidation.TypeSafeActivator 类发生的,该类在创建 SessionFactory 时运行。无论如何-感谢您的帮助。干杯!
    • 这个答案不太正确,Hibernate ORM 实际上为 DDL 考虑了一些 BV 约束。请查看我的回答,因为您可能看不到这种情况发生的几个原因。来源:我是 Hibernate 团队的成员,刚刚成功测试了这个功能。
    【解决方案2】:

    hbm2ddl 确实考虑了一些 Bean Validation 约束,即 @NotNull@Size@Digits 和由 Hibernate Validator 定义的旧版 @Length 约束。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多