gpt4 book ai didi

spring - 如何在持久化之前使用 Hibernate 验证的内部 @Entity 类处理 Spring BindingResult 异常

转载 作者:行者123 更新时间:2023-12-04 04:45:06 24 4
gpt4 key购买 nike

我有两个@Entity bean。 bean 一是“一对多”的第二个。 Bean1 和 Bean2 具有 JSR303 不同的注释 validator 。

@Entity
class Bean1 {
@OneToMany
private List<Bean2> var;

//other fields marked with JSR303
}

@Entity
class Bean2 {
//other fields marked with JSR303
}

我的任务是验证内部 Bean2。
首先,我有 Controller @Validated of Bean1
@Controller
class Controller {
public String methodPOST(@Validated Bean1 bean1, BindingResult errors)
}

Hibernate 在尝试持久化到 DB 之前会自动验证 JSR303。所以,我什至没有来自 Bean2 的任何验证异常,因为 Spring 不处理它们,而 Hibernate 抛出它。

我可以创建类似 DTO bean 的东西,并验证它们,如果将其标记为 @Valid,内部 Bean2DTO 将被验证,并且不会从 Hibernate 端抛出异常,因为在持久化之前没有验证。同样在这种情况下,我将在 Controller 方法中填充 BindingResult。

是否有一些解决方案可以让从 Hibernate org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(..) 抛出的 javax.validation.ConstraintViolationException 进入我的 BindingResult 而没有上述两个选项。

此外,由于其他逻辑量的损坏,我无法在持久化之前禁用 Hibernate 自动验证。

谢谢。

最佳答案

可以找到可能的重复项 here

回顾一下,您需要使用 @Valid 注释您的嵌套属性

@Entity
class Bean1 {
@OneToMany
@Valid
private List<Bean2> var;

//other fields marked with JSR303
}

@Entity
class Bean2 {
//other fields marked with JSR303
}

这也应该触发 Spring 中的嵌套验证(假设它还配置了 JSR-303 validator )。

关于spring - 如何在持久化之前使用 Hibernate 验证的内部 @Entity 类处理 Spring BindingResult 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com