我有两个 @Entity bean。豆一是第二个的“一对多”。Bean1 和 Bean2 具有 JSR303 不同的注解验证器。
@Entity
class Bean1 {
@OneToMany
private List<Bean2> var;
//other fields marked with JSR303
}
@Entity
class Bean2 {
//other fields marked with JSR303
}
我的任务是验证内部 Bean2。首先,我有带有 @Validated 的 Bean1 的控制器
@Controller
class Controller {
public String methodPOST(@Validated Bean1 bean1, BindingResult errors)
}
在尝试持久化到 DB 之前,Hibernate 会自动验证 JSR303。所以,我什至没有来自 Bean2 的任何验证异常,因为 Spring 不处理它们,并且 Hibernate 抛出它。
我可以创建类似 DTO bean 的东西,并对其进行验证,如果将其标记为@Valid,则内部 Bean2DTO 将被验证,并且不会从 Hibernate 端抛出异常,因为在持久化之前没有验证。同样在这种情况下,我将在 Controller 方法中填充 BindingResult。
是否有一些解决方案可以在没有上述两个选项的情况下从 Hibernate org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(..) 中将 javax.validation.ConstraintViolationException 抛出到我的 BindingResult 中。
此外,我不能在持久性之前禁用休眠自动验证,因为其他逻辑量的损坏。
谢谢你。