zuoshang
2014-08-15 13:05
浏览 305
已采纳

SpringMVC和Hibernate的一个冲突点?

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岂不是每次查询一个目录,会一连把父级的都查出来??

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • zkk765696946 2014-08-15 15:49
    已采纳

    如果父类还没有加载的时候,可以选择忽略改对象转化成json @JsonIgnore

    打赏 评论
  • renminzdb2 2014-08-15 13:59

    为什么会导致了在hibernate session之外调用了查询,没有看明白这句话的意思?controller层 json封装肯定是要加载数据 来封装啊 ……

    打赏 评论
  • weixin_42695566 2014-08-15 14:25

    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

    打赏 评论
  • iteye_4879 2014-08-16 01:00

    世界都笑了。。。。。。
    那是延迟加载。。。

    打赏 评论
  • M44346460 2014-08-16 11:30

    当你需要将对象转为JSON,并回传时,在load相应的实体的时候,可以用代码强制要求立即全部加载就行!代码上的控制会暂时无视配置文件的优先级!另外,SpringMVC是一个基于Web的框架,hibernate是一个orm框架,两者,八杆子打不着的关系,更不存在所谓的冲突点了!

    打赏 评论
  • fxl102065l 2014-08-18 17:46

    用JSON传值,我搞了几天,建议你不要修改POJO类,直接把关联对象设置为NULL

    打赏 评论

相关推荐 更多相似问题