java - Spring JPA 不在更新时验证 bean

标签 java spring hibernate spring-boot spring-validator

我正在使用 Spring Boot 1.5.7、Spring JPA、Hibernate 验证、Spring Data REST、Spring HATEOAS。

我有一个像这样的简单 bean:

@Entity
public class Person {
    @Id
    @GeneratedValue
    private Long id;

    @NotBlank
    private String name;
}

如您所见,我正在使用@NotBlank。根据 Hibernate 文档,应在预持久化和预更新时进行验证。

我创建了一个 junit 测试:

@Test(expected = ConstraintViolationException.class)
public void saveWithEmptyNameThrowsException() {  
    Person person = new Person();
    person.setName("");
    personRepository.save(person);
}

此测试工作正常,因此验证过程正确进行。而在这个测试用例中,验证不起作用:

@Test(expected = ConstraintViolationException.class)
public void saveWithEmptyNameThrowsException() {
   Person person = new Person();
   person.setName("Name");
   personRepository.save(person);

   person.setName("");
   personRepository.save(person);
}

我找到了另一个 similar question但不幸的是没有任何回复。 为什么不对 update() 方法进行验证?解决问题的建议?

最佳答案

我认为 ConstraintViolationException 不会发生,因为在更新期间 Hibernate 不会当场将结果刷新到数据库。尝试将测试中的 save() 替换为 saveAndFlush()。

关于java - Spring JPA 不在更新时验证 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850830/

相关文章:

java - 来自处理程序的安全 UI 更新

java - Java 9 spring boot 应用程序的 maven 构建期间的 RuntimeException

java - Spring MVC 验证不显示错误消息

java - 如何知道列表的数据类型

java - 为什么更新记录的子项会删除与其子项的连接?

java - hibernate/C3P0 : Server crashes after MySQL timeout

java - 为什么 Random::nextInt 不允许在 java 中作为方法引用?

java - 下载缩略图而不是整个图像

java - 查找 PI 具有特定值的术语

java - ModelAndView中重新发送请求参数