`

hibernate+spring mvc,解决hibernate对象懒加载,json序列化失败

 
阅读更多
在使用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;  
    } 
分享到:
评论

相关推荐

    springmvc+spring+hibernate+json文件

    在Java中,可以使用Jackson、Gson等库来序列化和反序列化Java对象为JSON格式,以便于网络传输。 结合这四个技术,开发者可以创建出高性能、模块化的Web应用程序。Spring MVC处理HTTP请求,调用由Spring管理的业务...

    springMVC+hibernate+spring4.3 jar包整合

    7. 使用Jackson库进行JSON序列化与反序列化:在需要的地方引入Jackson库,通过 ObjectMapper 进行对象与JSON字符串的转换。 8. 处理文件上传:如果需要支持文件上传,可以使用Commons FileUpload库,结合Spring MVC...

    Struts+Spring+Hibernate+Ajax的Demo

    DWR处理了JSON或XML的序列化和反序列化,简化了跨域通信问题。 **Dojo** 是一个JavaScript工具库,提供了丰富的UI组件、动画效果和数据绑定等功能,有助于创建交互式的Web应用。在这个Demo中,Dojo可能被用来创建...

    DWR+extjs+spring+hibernate

    DWR支持异步更新,提供了自动化的JSON和XML序列化,简化了前后端的数据交换。 **EXTJS** EXTJS提供了大量的预定义UI组件,如表格、表单、面板、树形视图等,这些组件具有高度可配置和可扩展性。EXTJS的布局管理器...

    springmvc_hibernate+json lib包

    标题中的"springmvc_hibernate+json lib包"表明这是一个与Spring MVC、Hibernate和JSON相关的库文件集合。在Java开发领域,这三大技术是构建Web应用程序的重要组件。让我们深入了解一下它们各自的功能以及它们如何...

    文件spring4.3.7+hibernate4.2.2mvc整合所需jar包

    5. `jackson-all-1.7.6.jar`:Jackson库用于JSON序列化和反序列化,使Java对象可以轻松转换为JSON格式,反之亦然。在Spring MVC中,这常用于处理HTTP请求和响应的数据交换。 6. `spring-webmvc-4.3.7.RELEASE.jar` ...

    Spring+hibernate+junit+aop_ jar包

    - `jackson-databind`是Jackson库的一部分,用于JSON序列化和反序列化,常用于前后端数据交换。 - `spring-webmvc`是Spring MVC框架的实现,用于处理Web请求和响应。 - `freemarker-2.3.15.jar`是FreeMarker模板...

    Spring mvc hibernate spring 开发所需jar包

    5. JSON处理库:如jackson-databind、gson等,用于JSON序列化和反序列化。 6. 可能还有其他依赖,如slf4j(Simple Logging Facade for Java)日志框架的API和实现,以及log4j等日志库,用于日志记录。 这些jar包的...

    Hibernate+struts2+Spring框架jar包大全

    - `jackson-all-1.9.0.jar`是Jackson库,用于JSON序列化和反序列化,便于与前后端进行数据交换。 - `mysql-connector-java-5.1.17-bin.jar`是MySQL数据库的Java连接器,使得Java程序可以连接并操作MySQL数据库。 ...

    struts1+spring+hibernate 整合jar包

    在开发中,Fastjson常用于前后端数据交换,提供高效的序列化和反序列化能力。 MySQL是一个广泛应用的关系型数据库管理系统,其jar包包含了与MySQL服务器通信所需的驱动程序。在整合项目中,开发者通常会用到这个jar...

    Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2+json+junit4所有的jar包大集合

    Java提供了多个库,如org.json或Jackson,来处理JSON对象的序列化和反序列化。 **JUnit4** 是Java领域广泛使用的单元测试框架,它极大地简化了测试代码的编写,引入了注解和测试套件等概念,使测试过程更加高效和...

    Spring4+SpringMVC4+Hibernate4+Jackson2.5.0

    **Jackson2.5.0** 是一个JSON处理库,用于在Java中序列化和反序列化JSON数据。它可以方便地将Java对象转换为JSON格式,或者将JSON字符串解析为Java对象,极大地简化了数据交换的过程。Jackson2.5.0版本包含了多项...

    Struts2+Spring3.0+MyBatis3.0平台搭建spring+json+gson+mysql,经典版本spring3.0+,完整架包

    描述中提到的"spring+json+gson+mysql",表明这个平台不仅包含了上述的三大框架,还涉及到了JSON序列化和MySQL数据库。JSON是一种轻量级的数据交换格式,广泛用于前后端交互。Gson是Google提供的一个库,用于在Java...

    struts2+spring3+hibernate3+jquery+springside 做一个OA2

    - **jackson-mapper-asl-1.9.0.jar**:这是Jackson库的一部分,用于JSON序列化和反序列化,Spring3和Struts2可能使用它进行JSON数据的处理。 - **mysql-connector-java-5.1.9.jar**:MySQL数据库的JDBC驱动,用于...

    springMVC+hibernate+json框架整套jar包,亲测

    1. **Jackson** 或 **Gson**:Java 库,用于 Java 对象与 JSON 字符串之间的序列化和反序列化。 2. **Ajax**:异步 JavaScript 和 XML 技术,常与 JSON 结合,实现前后端无刷新通信。 3. **RESTful API**:使用 ...

    SSH(Spring+Hibernate+Struts2)框架整合必须的85个jar包

    - `struts2-json-plugin.jar`:支持JSON序列化和反序列化。 - `ognl.jar`:Object-Graph Navigation Language,用于表达式语言和数据绑定。 4. **其他库**:除了SSH框架自身的库,还需要一些通用的库来支持它们的...

    Spring MVC所需jar包

    7. **Jackson 或 Gson**:用于 JSON 数据的序列化和反序列化,例如 `jackson-databind.jar`、`jackson-core.jar` 和 `jackson-annotations.jar`,或者 `gson.jar`。 8. **Dojo 或 jQuery**:如果在前端使用 ...

    Spring MVC框架的各种依赖包下载

    7. **Jackson或Gson**:用于JSON数据的序列化和反序列化,Spring MVC默认支持这两种库,便于前后端数据交换。 8. **Hibernate或MyBatis**:如果应用需要持久化数据,这些ORM(对象关系映射)框架可以与Spring MVC...

    spring mvc框架需要用到的jar包

    11. **jackson或者gson.jar**:JSON序列化和反序列化的库,Spring MVC通常使用它们将Java对象转换为JSON格式,以便于前后端的数据交换。 12. **validation-api.jar** 和 **hibernate-validator.jar**:用于执行Bean...

    struts2+spring+ibatis+jquery+json

    在前后端通信中,JSON常被用来传输数据,因为它具有良好的可读性和高效的序列化/反序列化性能。 在“Struts2+Spring+iBatis+jQuery+JSON”这种组合中,通常的开发流程是: 1. 用户通过浏览器发送请求,jQuery负责...

Global site tag (gtag.js) - Google Analytics