gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:37:49 25 4
gpt4 key购买 nike

我有一个定义如下的类:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com