Hibernate @Check аннотация не работает на уровне поля - PullRequest
1 голос
/ 22 марта 2020

constraint list Я использовал аннотацию @Check на уровне поля, но hibernate не создает проверочных ограничений для базы данных. Я исследовал, что это ошибка, и аннотацию @Check можно использовать только один раз и на уровне класса. Хорошо, но как я могу добавить несколько ограничений на уровне класса? Я не хочу добавлять все условия к одному и тому же ограничению.

@Entity
public class TemplateTest{

    @Id
    private String id;

    @Column(length = 20, nullable = false)
    private String name;

    @Column(precision = 5, scale = 2, nullable = false)
    @Check(constraints = "AMOUNT > 0")
    private BigDecimal amount;

    @Column(nullable = false)
    @Check(constraints = "DISPLAY_ORDER > 0")
    private int displayOrder;

}

против

@Entity
@Check(constraints = "DISPLAY_ORDER > 0 and AMOUNT > 0")
public class TemplateTest{

    @Id
    private String id;

    @Column(length = 20, nullable = false)
    private String name;

    @Column(precision = 5, scale = 2, nullable = false)
    private BigDecimal amount;

    @Column(nullable = false)
    private int displayOrder;

}

1 Ответ

0 голосов
/ 22 марта 2020
  1. Вы можете использовать свойство columnDefinition аннотации @Column:
@Entity
public class TemplateTest{

    @Id
    private String id;

    @Column(length = 20, nullable = false)
    private String name;

    @Column(precision = 5, scale = 2, nullable = false, columnDefinition = "bigint check(AMOUNT > 0)")
    private BigDecimal amount;

    @Column(nullable = false, columnDefinition = "bigint check(DISPLAY_ORDER > 0)")
    private int displayOrder;
}
В качестве альтернативы вы можете использовать файл сценария импорта для добавления дополнительных ограничений.

Чтобы настроить процесс создания схемы, свойство конфигурации hibernate.hbm2ddl.import_files должен использоваться для предоставления других файлов сценариев, которые Hibernate может использовать при запуске SessionFactory.

<property name="hibernate.hbm2ddl.import_files" value="schema-generation.sql" />

Hibernate выполнит файл сценария после автоматической генерации схемы.

...