2012-07-17 74 views
1

我正在开发一个使用Spring JPA 2.0和Hibernate作为ORM提供程序的应用程序。我们只读取数据库的访问权限并生成报告。我想在获取数据时进行一些验证。使用Spring JPA和Hibernate从数据库获取数据时启用强制验证

@Column(name = "LOGICAL_ID", nullable = false) 
@NotNull 
private Long logicalId; 

我添加了实现JSR 303规范的Hibernate验证器。但是在获取它时不会抛出任何运行时异常或ConstraintViolationException?我在配置中添加了一些东西还是缺少一些东西?请指教我。

回答

2

像我张贴在Implementing cross-validation in java

您可以使用下面的代码来手动验证的实体;

ValidatorFactory factory = Validation.byDefaultProvider().configure().traversableResolver(new CustomTraversableResolver()).buildValidatorFactory(); 
Validator validator = factory.getValidator(); 
Set<ConstraintViolation<YourBaseClass>> constraintViolations = Validator.validate(myEntityToValidate); 

如果你想这为您自动完成,它可能是在“javax.persistence.validation.mode”属性设置为none(http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/configuration.html)。

我更喜欢手动验证,因为那时你有控制和细节,其中约束没有通过。

+0

您好Marius,感谢您的回复。请原谅我的无知:如果我添加bean验证模式= NONE,然后根据Hibernate文档NONE:根本不使用Bean验证。而且在我的情况下,我想抛出运行时异常。根据hibernate文档:默认情况下,Bean Validation(和Hibernate Validator)被激活。当一个实体被创建,更新(并且可选地被删除)时,它在被发送到数据库之前被验证。在我的情况下,我只从数据库读取数据并验证数据,如果它不匹配约束我需要抛出异常。 – 2012-07-17 16:41:41

相关问题