0

我已经在我的项目中添加了休眠验证器,并用相关的约束注释了我的类。这是我的 pom.xml:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-orm-panache</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

这是带注释的类:

public class EmployeeProject extends PanacheEntity {

    @NotNull
    @ManyToOne
    private Employee employee;

    @NotNull
    @ManyToOne
    private Project project;

    @Column
    @Min(value = 1)
    private int quantity;

}

当我尝试通过 Java 代码持久化一个无效的 bean - null 员工/项目和/或非正数 - 时,会引发验证异常,如预期的那样。

但是,当我尝试将无效元组直接保存到数据库中时,令人惊讶的是没有引发异常或数据库错误。实际上原因是employee_projectHibernate 自动生成的没有验证约束——只有两个外键约束。我知道在 SQL 中没有简单的翻译方法@Min,但是男孩我至少期待一个 NOT NULL on employee_idand project_id

这是常规行为,还是我错过了什么?

4

1 回答 1

1

这在@Minjavadoc中有解释:

null elements are considered valid.

null是未定义的值,@Min您说的是,如果值已定义,则它必须至少是某种东西。

缺少其他约束,因为@ManyToOne默认值 isoptional=true并且 JPA 注释在创建数据库时优先于 Bean Validation 之一。

这是有道理的,因为有人可能想要验证数据库上没有约束的列。

如果您使用@ManyToOne(optional=false).

于 2021-03-28T09:49:27.800 回答