在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例:
@RequestMapping("login") @ResponseBody public Object login(@RequestParam String username,@RequestParam String password){ List<User> list=userDAO.findByUsername(username); if(list.size()>0){ User user=list.get(0); if(user.getPassword().equals(password)){ return new Result(user, "操作成功", true); }else{ return new Result(null, "密码错误", true); } }else{ return new Result(null, "用户未注册", false); } }
客户端抛出org.hibernate.LazyInitializationException异常。通过查询资料和摸索整理出三种解决方法:
第一种:(推荐)
在web.xml中加入:
<filter> <filter-name>openSession</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> <init-param> <param-name>singleSession</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>openSession</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这样返回的Spring mvc返回的Json串也包含一对多关系中的对象,不过都是空的。
{"message":"操作成功","results":{"language":null,"id":"402881e6421e40b601421e4111c60001","type":null,"extra":null,"time":null,"username":"wanggang","msg":null,"password":"138333","tag":null,"tel":null,"qq":null,"email":null,"gender":null,"lat":null,"lang":null,"point":null,"openid":null,"city":null,"photo":null,"notes":[],"chatsForUserTwoId":[],"attentionsForUserId":[],"attentionsForAttentionUserId":[],"logs":[],"chatsForUserOneId":[],"commentsForNoteId":[],"commentsForUserId":[]},"success":true}
第二种方法(推荐):
在一对多的关系中加@JsonIgnore,这样Jackson在转换的时候就会过滤掉这个对象:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user") @JsonIgnore public Set<Log> getLogs() { return this.logs; } public void setLogs(Set<Log> logs) { this.logs = logs; }
第三种方式:
把fetch模式配置成“FetchType.EAGER”,这样的方式可以解决问题,但是这样的方式会强制提取一对多关系中的数据,生成很多无用数据,也会增加系统负担,所以不建议采用。
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "user") public Set<Log> getLogs() { return this.logs; } public void setLogs(Set<Log> logs) { this.logs = logs; }
相关推荐
Spring + Hibernate + Spring mvc +Ajax 整合 框架,一个简单的添加删除。
基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现,内含有可直接运行的源代码以及数据库文件。由于项目中jar包过大,所以将源代码放在了百度网盘中,请根据文件中的链接以及提取码,下载源码。
Spring mvc 返回数据格式采用统一的对象(JSONReturn)进行封装 09. 通过自定义处理器 ExceptionIntercept 实现 Spring mvc的全局异常捕获 10. 系统中包含了企业中采用的开发工具类的集合 11. AbstractDao 父类...
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
easyUI+Hibernate+Spring MVC源码
hibernate + spring mvc + spring + maven整合开发 Java 开源博客系统;有任何不懂的技术问题都可以联系我共同讨论
基于jpa+hibernate+spring+spring mvc注解方式项目案例带整体架构及一个页面操作小流程适合新手
ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8完成的后台管理项目,觉得是值得参考的实用项目 下载链接
基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
前端使用Extjs后台使用spring mvc 数据访问层使用hibernate 数据库使用mysql,是学习extjs、spring mvc以及hibernate的比较好的例子,希望能帮到各位。
基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
本光盘是《整合Struts+Hibernate+Spring应用开发详解》一书的配书光盘,书中的代码按章存放, 即第二章所使用的代码放在codes文件夹的02文件夹下,依次类推。 本光盘根目录下有11个文件夹,其内容和含义说明如下: ...
基于hibernate + spring + spring mvc + bootstrap的管理系统实现;有任何不懂的技术问题都可以联系我共同讨论
基于ExtJS 4.2.1+Hibernate 4.1.7+Spring MVC 3.2.8的通用后台管理系统
车辆管理系统(struts+hibernate+spring+oracle).rar
Hibernate+Spring+Spring MVC+Bootstrap的管理系统源码,资源大小72.7 MB ,欢迎下载
基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
spring boot+hibernate+spring mvc+thymeleaf 实例,下载导入即可运行,可独立部署到独立tomcat,可内置tomcat运行,配置都在,数据库mysql直接导入脚本即可,可加我扣扣410987712一起学习
spring mvc + spring + hibernate 全注解整合开发视频教程 11
网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring...