【发布时间】:2013-06-27 03:45:35
【问题描述】:
我有一个会话属性,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=]
如果我在 //TEST CODE HERE 的 objectToValidate 上运行 gettter,如下所示,我得到传入的正确值(例如“dummy”),如果在运行后我再次观察到“objectToValidate”,它甚至显示与上面相同的结果虽然它现在应该不再是 Lazy 初始化了。
String email = (Contact)objectToValidate.getEmail();
如果我在 //TEST CODE HERE 创建一个虚拟对象,代码可以正常工作,并且活页夹会发现错误。
Contact dummy = new Contact();
dummy.setEmail("dummy");
基本上 binder.getBindingResult() 在使用休眠对象时不会,我不知道如何修复它。它似乎无法解析 LAZY 初始化的休眠对象属性(即使在我调用对象上的方法并获得正确结果之后)。
【问题讨论】:
标签: hibernate spring-mvc