实体类A包含B对象[B也是实体类]在dao层进行数据操作的时候,B对象的数据都读取成功并可以进行操作,单当返回给service层的时候,A类的一些String、int类型的数据还在,B对象里的值都却变成了null,为什么?hibernate查询返回实体为null

解决方案 »

  1.   

    hibernate的延迟加载机制导致的;
    A对象会全部加载,B对象你使用的时候才加载;在DAO里面session并未关闭,对某个A对象,取B对象是可以的;
    传到Service层之后,再想直接取A对象中的未加载的B对象就不行了;
      

  2.   


    恩,就是这个问题!
    如果我想要在Service层也使用B对象,应该在哪(hbm.xml/java)设置?(怎么取消懒加载及动态选择是否进行懒加载?)
      

  3.   

    在DAO查询的时候取出来就好^_^
    延迟加载最好是不要取消
      

  4.   


    在Action调用A对象的时候,B对象会变回null,现在我想在Action中使用A对象里的B的其他属性,在DAO如何取?new一个B对象给A吗?[不取消延迟加载]
    A a=new A();
    B b= new B();
    在DAO查询出A对象后,怎么赋值b给a,让a.getB()不为null?
    直接b=a.getB()然后再a.setB(b)?还是说无法直接在DAO层实现,只能在service层的时候增加逻辑:新建a和b对象,分别访问数据库,然后赋值a.setB(b),再返回a.....
      

  5.   

    比如说QBC查询的话,加句criteria.createAlias("B", "b");
    比如说HQL查询的话,这样from A a inner join fetch a.B;