如何解决关于 Hibernate bean 验证
我已将 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>
这是带注释的类:
public class EmployeeProject extends PanacheEntity {
@NotNull
@ManyToOne
private Employee employee;
@NotNull
@ManyToOne
private Project project;
@Column
@Min(value = 1)
private int quantity;
}
当我尝试通过 Java 代码持久化无效 bean(空员工/项目和/或非正数)时,会按预期引发验证异常。
然而,当我尝试将一个无效的元组直接持久化到数据库中时,令人惊讶的是没有引发异常或数据库错误。事实上,原因是 Hibernate 自动生成的 employee_project
没有验证约束——只有两个外键约束。我知道没有简单的方法可以在 sql 中翻译 @Min
,但是男孩,我至少期待在 employee_id
和 project_id
上有一个 NOT NULL!
这是常规行为,还是我遗漏了什么?
解决方法
这在 @Min
javadoc 中有解释:
null elements are considered valid.
一个 null
值是一个未定义的值,使用 @Min
你是说,如果该值被定义,它必须至少是一些东西。
缺少其他约束,因为 @ManyToOne
默认值为 optional=true
,并且在创建 DB 时 JPA 注释优先于 Bean Validation 注释。
这是有道理的,因为有人可能想要验证数据库中没有约束的列。
如果您使用 @ManyToOne(optional=false)
,它会起作用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。