【问题标题】:Express not trivial constraints in JPA在 JPA 中表达不平凡的约束
【发布时间】:2010-03-04 15:35:17
【问题描述】:

在 JPA 中表达范围约束的最佳方式是什么?我想表达类似“此列只能取 1..5 之间的值”之类的内容。

也许我可以为此使用@PrePersist 和@PreUpdate。

有没有更好的办法?

【问题讨论】:

    标签: java jpa constraints


    【解决方案1】:

    Bean 验证 (JSR 303) 是一个标准Hibernate Validator 只是一个实现(更准确地说是 RI),所以这并不能真正将您与 Hibernate 联系起来。尽管 Bean Validation 1.0 是 Java EE 6 的一部分,但它可以在 Java EE 6 容器“外部”使用。它允许做这样的事情:

    public class Address {
    
        @NotNull private String line1;
        private String line2;
        private String zip;
        private String state;
    
        @Length(max = 20)
        @NotNull
        private String country;
    
        @Range(min = -2, max = 50, message = "Floor out of range")
        public int floor;
    
            ...
    }
    

    最近的 Bean Validation with JPA 1.0 博客文章展示了如何将此 API 与 JPA 1.0 与实体侦听器一起使用(对 @PrePersist@PreUpdate 执行验证)。

    【讨论】:

      【解决方案2】:

      Hibernate Validator 实现的 JSR 303 可用于此目的。不过,我想说这取决于您的 Web 框架(如果您正在构建一个 Web 应用程序),它可以用于执行客户端验证的效果如何。我们目前正在尝试将其与 GWT 应用程序集成。

      Google 和 SO 提出了另一个我目前不知道的实现:agimatec-validation

      【讨论】:

      • 嗯,也许这是一个解决方案。我正在寻找某种技巧,一种快速的方法。另外,我说的是数据库级别约束,而不是客户端验证。
      猜你喜欢
      • 2011-11-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      相关资源
      最近更新 更多