Hibernate.initialize(r.getStudents());
这个方法强制加载 students属性,  当然要生成两条sql
一条查room, 一条查student.
两条都是这条语句生成的啊

解决方案 »

  1.   

    纠正一下:
    public class Room implements Serializable {
      private int roomId;
      private String address;
      private String student;
      ...
    }
    应该是
    public class Room implements Serializable {
      private int roomId;
      private String address;
      private Student student;
      ...
    }
      

  2.   

    aChinese(一个中国人):
    Hibernate.initialize(r.getStudents());
    要强制加载吗?
    那为什么
    Hibernate.initialize(r.getStudent());
    又不强制加载呢?对于Hibernate.initialize(r.getStudent());
    我的理解是:加了lazy="true"之后,在加载room的时候并不会实际加载student而是生成一个代理,也就是HibernateProxy,到了实际用到student的时候就会加载它
    那为什么对集合不是呢?
      

  3.   

    你知道initialize()方法是干什么的吗?就是相当于把这个类的属性用一下, 就是为了防止惰性载入, 故意去读一下
      

  4.   

    注一下
    lazy="true" 指的应该是配置文件里头的吧