Hibernate中,对于某实体的内部实体属性有lazy load功能,可以等到get时才去查询数据库,而不用一开始就join出。
SpringMVC的controller返回JSON格式的数据,一般用Jackson的lib,在实体转换到JSON object时,貌似会激发实体的get方法,而导致了在hibernate session之外调用了查询,结果必然是失败抛异常。
网上的做法都是将Lazy load设置为false,感觉这样做不妥,一是lazy load的选择不应该受bug的影响。更主要的是如果实体是folder,内部属性也是folder(上级目录),若不用lazy load岂不是每次查询一个目录,会一连把父级的都查出来??
如果父类还没有加载的时候,可以选择忽略改对象转化成json @JsonIgnore
为什么会导致了在hibernate session之外调用了查询,没有看明白这句话的意思?controller层 json封装肯定是要加载数据 来封装啊 ……
web.xml中添加如下配置:
[code="java"]
jpa-open-entity-manager
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
jpa-open-entity-manager
/*
[/code]
参考资料:http://blog.csdn.net/fox_lht/article/details/7382018
世界都笑了。。。。。。
那是延迟加载。。。
当你需要将对象转为JSON,并回传时,在load相应的实体的时候,可以用代码强制要求立即全部加载就行!代码上的控制会暂时无视配置文件的优先级!另外,SpringMVC是一个基于Web的框架,hibernate是一个orm框架,两者,八杆子打不着的关系,更不存在所谓的冲突点了!
用JSON传值,我搞了几天,建议你不要修改POJO类,直接把关联对象设置为NULL