补充:怎么保证client端能够放心的使用我写的dao返回给它的object?

解决方案 »

  1.   

    设置为lazy=true在需要persons的method里调用Hibernate.initialize()来加载集合....这个问题只能根据不同的业务需求来进行不同的处理...这样才能达到最优的性能
      

  2.   

    你是指Hibernate本身提供的通用点的方法?  没有....
      

  3.   

    不一定是hibernate提供的,只要不是session open in view的就行
      

  4.   

    这里有个问题,如果我们采用了延迟加载机制,但希望在一些情况下,实现非延迟加
    载时的功能,也就是说,我们希望在Session关闭后,依然允许操作user的addresses
    属性。如,为了向View层提供数据,我们必须提供一个完整的User对象,包含其所关联的
    address信息,而这个User对象必须在Session关闭之后仍然可以使用。
    Hibernate.initialize方法可以通过强制加载关联对象实现这一功能:Hibernate.initialize(user.getAddresses());
    session.close();
    Set hset= user.getAddresses();                              ----摘至《hibernate开发指南》author:夏昕
      

  5.   

    这个我知道,但是我怎么保证在不是session open in view的环境下,既能双向关联,又能保证view层能够放心的使用返回的user(如果返回给view层的是lazy addresses的user),你想想,User的getAddress方法对view层总是open的,但是如果是lazy addresses的user,一旦invoke这个方法就报错了
      

  6.   

    如果是web应用,那session open in view最方便啦,但session open in view可能有其他副作用如果你想要返回的对象跟hibernate完全没有关系,那只有把数据copy出来了,你可以copy到dto中,我们现在是把hibernate的entity clone一份出来,当然对象之间的关联你要处理一下
      

  7.   

    我想干脆把getPersons置成private,一切ok,view层没有机会通过pojo去访问lazy address。