Java 关于hibernatebean验证

Java 关于hibernatebean验证,java,hibernate,quarkus,hibernate-validator,quarkus-panache,Java,Hibernate,Quarkus,Hibernate Validator,Quarkus Panache,我已经将hibernate验证器添加到我的项目中,并用相关约束注释了我的类。这是我的pom.xml: <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-hibernate-orm-panache</artifactId> </dependency> <dependency> <groupId>io.qu

我已经将hibernate验证器添加到我的项目中,并用相关约束注释了我的类。这是我的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>
当我试图通过Java代码持久化一个无效的bean(null employee/project和/或非正数)时,正如预期的那样,会引发一个验证异常

然而,当我试图将无效元组直接持久化到数据库中时,令人惊讶的是,没有出现异常或DB错误。实际上,原因是Hibernate自动生成的
employee\u项目
没有验证约束,只有两个外键约束。我知道在SQL中翻译
@Min
没有简单的方法,但我至少希望
员工id
项目id
上有一个NOTNULL

这是正常的行为,还是我遗漏了什么?

这在以下章节中解释:

null
值是一个未定义的值,使用
@Min
您的意思是,如果定义了该值,它必须至少是某个值

缺少其他约束是因为
@ManyToOne
默认值为
optional=true
,并且在创建数据库时,JPA注释优先于Bean验证注释

这很有意义,因为可能有人想验证数据库中没有约束的列


如果您使用
@ManyToOne(可选=false)

我明白了。这解释了为什么我对
quantity
字段没有附加约束。但是
员工id
项目id
呢?它们被注释为
@NotNull
,但是它们的数据库上没有
NotNull
约束。实际上,它应该可以工作。您使用Hibernate生成数据库了吗?使用
create
create drop
选项?这将删除并重新创建您的数据库:
quarkus.hibernate orm.database.generation=drop and create
您能将测试项目推到某处吗?这可能是一个华丽的错误。你可以试着不使用华丽,看看它是否工作正常
public class EmployeeProject extends PanacheEntity {

    @NotNull
    @ManyToOne
    private Employee employee;

    @NotNull
    @ManyToOne
    private Project project;

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

}
null elements are considered valid.