我有一个定义如下的类:
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/