4

我有表格,下面的片段。

    package test;

    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.persistence.UniqueConstraint;

    @Entity
    @Table(uniqueConstraints = { @UniqueConstraint(columnNames = "code")},
           name = "coupons")
    public class Coupon implements  Serializable {

        private static final long serialVersionUID = 5534534530153298987L;

        @Id
        @GeneratedValue
        @Column(name = "id")
        private long id;

        @Column(name = "available_count")
        private Integer availableCount = 1;

        public Integer getAvailableCount() {
            return availableCount;
        }

        public void setAvailableCount(Integer availableCount) {
            this.availableCount = availableCount;
        }
    }

如何使约束只允许availableCount非负数?

4

4 回答 4

5

如果你需要一个实际的数据库约束,并且你的模式是由 Hibernate 生成的,你可以使用@Check注解:

@Entity
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = "code")},
        name = "coupons")
@Check(constraints = "available_count >= 0")
public class Coupon implements  Serializable { ... }
于 2011-01-18T14:46:36.687 回答
3

利用Hibernate Validator 项目

于 2011-01-18T14:29:01.853 回答
2

您可以使用@Min

public class Coupon implements Serializable {

    @Min(0)
    @Column(name = "available_count")
    private Integer availableCount = 1;

}

Min文档:字段或属性的值必须是大于或等于 value 元素中的数字的整数值

在此处检查所有 JPA 约束

它们可以在Hibernate中使用

于 2017-11-24T02:01:28.137 回答
1

简单的方法是让它像这样:

public void setAvailableCount(Integer availableCount) {
    if(availableCount < 0){
        throw new IllegalArgumentExcpetion("Must be possive value");
    }
    this.availableCount = availableCount;
}

这不会创建数据库约束。

编辑:

如果您使用 JPA-Annotations,您可以创建一个 @PrePerist-Annotated 方法:

@PrePersist
public void something(){
    if(availableCount < 0){
        throw new IllegalArgumentExcpetion("Must be possive value");
    }
}

提交应该失败,加载应该工作。

于 2011-01-18T14:31:04.477 回答