【发布时间】:2020-08-16 17:22:45
【问题描述】:
我正在使用 Hibernate 将实体保存在数据库中。
在Entity字段(列)上,我定义了很多Constraints(比如NotNull或者length=10)。 当违反约束时,将引发 ConstraintViolationException。我希望能够以某种方式跟踪违反了哪一列的约束。 Java 库“javax.validation.ConstraintViolation”中的 ConstraintViolationException 有一个方法“getConstraintViolations()”,所以我可以这样做
constraintViolationException.getConstraintViolations().getPropertyPath()
这应该给我列名。
但是,Hibernate 抛出的 ConstraintViolationException 没有方法“getConstraintViolations()”,并且似乎没有类似的方法。 我现在唯一的选择是分析调用“getConstraintName()”返回的字符串:
constraintViolationException.getConstraintName()
但这似乎有点混乱且不安全。
有人知道如何获取列名吗?
编辑:
pom.xml里面的相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
【问题讨论】:
-
消息选项?
@Email(message = "Invalid email") @NotEmpty(message = "Please enter email") private String email;和violation.getMessage() -
我想知道你是如何进入休眠状态的
ConstraintViolationException。您能否提供一个配置的最小示例,例如pom.xml或build.gradle? -
@DirkDeyne 我用@Column() 注释了我的大部分类字段。我在那里没有找到类似于“消息”的内容:/ 更改注释以完成此操作是否更好?
-
这可能对hibernate-notnull-vs-nullable有帮助?
-
@weirdVariable 您无法在访问数据库之前控制数据的某些约束(例如@NotNull),但您无法确定在访问数据库之前是否会违反唯一键约束。所以不要期望得到一个
javax.validation.ConstraintViolation来满足你的所有约束。
标签: java hibernate spring-boot maven