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;

}

最小限のドキュメント: フィールドまたはプロパティの値は、値要素の数値以上の整数値でなければなりません

ここですべての 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 に答える