我的课程定义如下:
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>
答案 0 :(得分:1)
您的JPA实现必须集成bean验证。如果你正在使用Hibernate,这将通过将验证提供程序放在类路径中自动发生。如果没有阅读10.1.3. JPA。鉴于你的标签,我假设你正在使用JPA / Hibernate,它应该可以工作。
我不知道你的JPA实现正在调用gameDAO.save()
。 Hibernate的集成是event based。如果您的save()
不是这些事件,则默认情况下不会进行验证: