2 つの @Entity Bean があります。Bean 1 は 2 番目の「1 対多」です。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 を検証することです。まず、Bean1 の @Validated を持つコントローラーがあります。
@Controller
class Controller {
public String methodPOST(@Validated Bean1 bean1, BindingResult errors)
}
Hibernate は、DB に保持しようとする前に JSR303 を自動的に検証します。したがって、Bean2 からの検証例外はありません。Spring はそれらを処理せず、Hibernate がそれをスローするためです。
DTO Bean のようなものを作成して検証できます。@Valid とマークすると内部の Bean2DTO が検証され、永続化の前に検証がないため、Hibernate 側から例外はスローされません。その場合も、Controller メソッドに BindingResult を設定します。
上記の2つのオプションなしで、Hibernate org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(..) からスローされた javax.validation.ConstraintViolationException を私の BindingResult に取得する解決策はありますか。
また、他の量のロジックが破損しているため、永続化の前に Hibernate の自動検証を無効にすることはできません。
ありがとうございました。