我有两个@Entity bean。豆一个是“一对多”的第二个。 Bean1和Bean2具有JSR303不同的注释验证器。如何处理来自内部@Entity类的Spring BindingResult异常在持久化之前使用Hibernate进行验证
@Entity
class Bean1 {
@OneToMany
private List<Bean2> var;
//other fields marked with JSR303
}
@Entity
class Bean2 {
//other fields marked with JSR303
}
我的任务是验证内部Bean2。所有的 首先我控制器,Bean1
的@Validated@Controller
class Controller {
public String methodPOST(@Validated Bean1 bean1, BindingResult errors)
}
Hibernate试图去持续到数据库之前会自动验证JSR303。所以,我甚至没有任何来自Bean2的验证异常,因为Spring不处理它们,而Hibernate则抛出它。
我可以创建类似DTO bean的东西,并验证它们,如果标记@Valid,内部Bean2DTO将被验证,并且不会从Hibernate方面抛出异常,因为在持久化之前没有验证。同样在这种情况下,我将在Controller方法中填充BindingResult。
是否有一些解决方案可以从Hibernate org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(..)中将javax.validation.ConstraintViolationException引发到BindingResult中,而不需要上述两个选项。
此外,我不能禁用Hibernate自动验证之前的持久性,由于腐败其他量的逻辑。
谢谢。
无论有没有有效的注释都没有关系,因为hibernate在持久化之前总是会验证,它会抛出与我上面描述的相同的异常,并且有效或没有它。 –
我发现了问题,我有。我使用指定的组验证了注释,并且有效注释不起作用,因为还验证了在验证中指定的组。非常感谢您的建议! –