【问题标题】:Spring Bean Validation with Hibernate: validation not happening on update使用 Hibernate 进行 Spring Bean 验证:更新时未发生验证
【发布时间】:2014-04-11 04:46:00
【问题描述】:

我有一个类定义如下:

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);
}

如何在保存已持久化的对象时触发验证器?最好通过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>

【问题讨论】:

  • @NotBlank 是否检查空白?
  • 验证通常(并且应该)在命令 bean 上完成。
  • 谢谢,您能否指导我参考一些有关如何执行此操作的文档?
  • 123this 是一个基本的成熟示例。
  • this 问题的回答说明了很多关于验证的内容。

标签: spring hibernate validation bean-validation hibernate-validator


【解决方案1】:

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

我不知道 gameDAO.save() 对您的 JPA 实现有何要求。 Hibernate 的集成是event based。如果您的save() 没有这些事件,则默认情况下不会进行验证:

  • 预插入事件
  • PreUpdateEvent
  • 预删除事件

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 2018-04-10
    • 2020-09-25
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多