Hibernate неотрицательное значение ограничения - PullRequest
4 голосов
/ 18 января 2011

У меня есть таблица, фрагмент ниже.

    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 ]

5 голосов
/ 18 января 2011

Если вам нужно фактическое ограничение базы данных, и ваша схема сгенерирована Hibernate, вы можете использовать @Check аннотация:

@Entity
@Table(uniqueConstraints = { @UniqueConstraint(columnNames = "code")},
        name = "coupons")
@Check(constraints = "available_count >= 0")
public class Coupon implements  Serializable { ... }
3 голосов
/ 18 января 2011

использовать Hibernate Validator project

1 голос
/ 24 ноября 2017

Вы можете использовать документацию @Min.

public class Coupon implements Serializable {

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

}

Мин. . Значение поля или свойства должно быть целочисленным, большим или равнымчисло в элементе значения

Проверьте все JPA-содержания здесь

Они действительны для использования в Hibernate

0 голосов
/ 18 января 2011

Простой способ сделать это так:

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

Это не создаст ограничение базы данных.

edit:

Если вы используете аннотации JPA, вы можете создать метод @ PrePerist-Annotated:

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

Фиксация должна завершиться неудачно, загрузка должна работать.

...