使用 Hibernate : validation not happening on update 进行 Spring Bean 验证

标签 spring hibernate validation bean-validation hibernate-validator

我有一个定义如下的类:

import org.hibernate.validator.constraints.NotBlank;

public class Game {

    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    @Column(name = "id")
    Long id;

    @NotBlank
    @Column(name = "title")
    String title;
    ...

但是,当我执行下面的测试时,没有抛出验证异常:

@Test(expected = ConstraintViolationException.class)
public void thatExistingGameGivenBlankTitleCannotBeSaved(){
    Game game = new Game("SimCity 2000");
    gameDAO.save(game);
    game.setTitle(" "); //game.setTitle(null) doesn't work either
    gameDAO.save(game);
}

如何在保存已持久化的对象时触发 validator ?最好通过 Java 配置。

我的验证依赖项:

<!-- validation -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.0.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>2.2.4</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.el</artifactId>
    <version>2.2.4</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-cdi</artifactId>
    <version>5.1.0.Final</version>
</dependency>

最佳答案

您的 JPA 实现必须集成 bean 验证。如果您使用的是 Hibernate,这将通过将验证提供程序放在类路径中来自动发生。如果不读 10.1.3. JPA .根据您的标签,我假设您使用的是 JPA/Hibernate,它应该可以工作。

我不知道 gameDAO.save() 在您的 JPA 实现上调用了什么。 Hibernate 的集成是 event based .如果您的 save() 不是这些事件,则默认情况下不会进行验证:

  • 预插入事件
  • 更新前事件
  • 预删除事件

关于使用 Hibernate : validation not happening on update 进行 Spring Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22260226/

相关文章:

java - 是否保证在同一 bean 中使用 @PostConstruct 注释的方法先于使用 @Scheduled 的方法执行?

java - 如何使用类类型作为映射键,并将类的值列表作为映射值?

c# - ListView 绑定(bind)项上的 ValidationRules

ruby-on-rails - Rails-枚举字段的测试验证

java - 带有自定义 UserDetailsS​​ervice 的 Spring Boot

java - Spring 表达语言的映射

java.lang.IllegalArgumentException : Result Maps collection does not contain value for a certain mapper 异常

java - org.springframework.orm.hibernate3.HibernateSystemException : Unknown entity: java. util.ArrayList

java - gson序列化时如何排除字段

validation - 验证Grails中的加密密码