我有一个会话属性,myForm 包含一些从数据库加载的 Hibernate 对象
@SessionAttributes("myForm")
从我的控制器我收到表格并像这样处理它
@RequestMapping(value = "/mymapping", method = RequestMethod.POST)
@ResponseBody
public final JsonValidationResponse validateContact(
@ModelAttribute(value = "myForm") final MyForm myForm) {
return jsonValidator.getJsonErrors(myForm.getContact());
}
Contact 类具有以下验证注释
@Email
private String email;
以下方法有问题
public final <T> JsonValidationResponse getJsonErrors(
final T objectToValidate) {
//TEST CODE HERE
DataBinder binder = new DataBinder(objectToValidate);
binder.setValidator(validator);
binder.validate();
return getJsonErrors(binder.getBindingResult());
}
如果我观察 objectToValidate 我看到以下内容,我认为这是因为它是一个休眠对象并且正在使用 LAZY 初始化。
com.mypackage.Contact_$$_javassist_27@1bdbbc0[contactId=0,name=,email=,phone1=,phone2=,phone3=,version=0,createDate=,modifiedDate=,userId=]
如果我在 objectToValidate 上运行 gettter,//TEST CODE HERE
如下所示,我得到传入的正确值(例如“dummy”),如果在运行后我再次观察到“objectToValidate”,它会显示与上面相同的结果,即使它现在应该是 no更长的延迟初始化。
String email = (Contact)objectToValidate.getEmail();
如果我在 处创建一个虚拟对象//TEST CODE HERE
,则代码可以正常工作,并且活页夹会发现错误。
Contact dummy = new Contact();
dummy.setEmail("dummy");
基本上 binder.getBindingResult() 在使用休眠对象时不会,我不知道如何修复它。似乎它无法解析 LAZY 初始化的休眠对象属性(即使在我调用对象上的方法并获得正确结果之后)。