当前位置: 首页 > 知识库问答 >
问题:

使用Hibernate验证Spring Bean:更新时不进行验证

易琛
2023-03-14
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>

共有1个答案

邵兴庆
2023-03-14

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

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

  • 预插入
  • PreUpdateEvent
  • PreDeleteEvent
 类似资料:
  • 问题内容: 我刚刚开始将使用Hibernate 3.5.6.Final的应用程序升级到3.6.0.Final,并且已经进行了一些改进。我找不到最后的解决方法。 3.6.0.Final似乎在通过Hibernate保存/更新对象时自动打开Bean验证。这非常糟糕,因为我的某些测试不会费心设置所有属性- 只是不需要它们。老实说,我认为设置每个“描述”字段以及无数其他字段只是为了符合某些任意验证的意义。

  • 我可以使用shell命令在mongodb上进行身份验证: 目前,我正在从事一个项目,我想使用Hibernate OGM。我已设置文件: 正如您所看到的,我使用作为身份验证机制。 原因:org.hibernate.service.spi.serviceException:OGM000071:无法启动数据存储提供程序,原因:org.hibernate.hibernateException:OGM001

  • 我明白验证在应用程序的几个层中都是必需的。但是,如果要在所有层中实施的验证都是相同的(大多数情况下都是这样),那么使用一个公共的验证框架是有意义的。这是Hibernate验证器的目标之一。 那么,哪条路走得更好呢?

  • 问题内容: 我正在使用php来验证google REcaptcha ..就后端验证而言,如果验证码未提交并且完成的用户存储在数据库中,但是当我将其与jquery连接时出现主要问题,则会给出错误提示。 ..问题是,即使验证码在后端经过验证,每次也总是发出错误“您缺少的验证码”,请帮帮我,如果有错,请原谅我.. !! 这里gose .php 文件 这是引导中的gose .html 文件 这里是主要的

  • 首先,我是Vaadin7的新手。当我发现BeanFieldGroup.class时,我正在尝试一些vaadin演示。正如我所看到的,这个类将一个字段绑定到一个bean属性。在bean中,使用验证约束注释对属性进行注释(JSR303)。在本例中,我的pom.xml包含hibernate验证器依赖项: 我创建了validationmessage.properties文件,并在其中放了一些消息(带有匈牙

  • 我需要应用一个双值验证,这需要与圆周率匹配。我正在考虑使用@pattern(regex=“3.14159265359”)。这是使用Hibernate验证约束应用这样一个约束的最佳方式吗?谢谢