poster214 2010-03-24 10:38
浏览 363
已采纳

hibernate 延迟加载异常(无法获取lazy对象)

我在jpa中有两个对象:hospitalization与patient,两个对象之间是多对一双向关联,全部都加上lazy
然后在查询的时候使用left join fetch 来加载patient
service如下:
[code="java"]

    try{

        String sql="select h from Hospitalization as h left join fetch h.patient where h.code=?1";
        Query query=entityManager.createQuery(sql);
        query.setParameter(1, code);
        return (Hospitalization) query.getSingleResult();
    }catch(Exception e){
        e.printStackTrace();
        return null;
    }

[/code]
这样返回的hospitalization这个对象无法获取patient这个属性,报no session异常:
[code="java"]
2010-03-24 10:40:22,343 [main] ERROR org.hibernate.LazyInitializationException:19 - could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:166)
[/code]
如果我在service上面用
[code="java"]
Hospitalization h=(Hospitalization) query.getSingleResult();
// System.out.println(h.getPatient().getPatientName());
return h;
[/code]
这样来写可以get到,但是这样hibernate又从数据库查询了一次,明明在调用left join fetch 这个sql的时候已经搜索出来了patient值(在sqlserver上面执行可以看到)但是他却不会组装成对象关联,返回给client的时候数据就又丢失了,请问这样的问题该怎么解决,这种情况只有个别类会遇到,完全一样的写法有些类就没问题

  • 写回答

18条回答 默认 最新

  • hujunfei 2010-03-27 16:33
    关注

    select h.xx,p.xx from Hospitalization as h left join fetch h.patient p where h.code=?1
    p.xx是patient对象的属性值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(17条)

报告相同问题?

悬赏问题

  • ¥15 有偿求码,CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路