一:立即加载
当加载完实体对象后,立即加载其关联的对象数据
Customer类的映射文件 Customer.hbm.xml
<list name="Customer" table="t_customer" cascade="all" lazy="false" inverse="true">
<key column="cid"></key>
<index column="listindex"></index>
<one-to-many class="com.lovo.po.PetDiary"/>
</list>
实际项目中不可能false 只能是true
二:延迟加载
<list name="Customer" table="t_customer" cascade="all" lazy="true" inverse="true">
<key column="cid"></key>
<index column="listindex"></index>
<one-to-many class="com.lovo.po.PetDiary"/>
</list>
1:当查询用户的信息时,也只是查询用户的信息,对于用户的集合信息,并不会查询(也就说没有和数据库的另外一张表交互),当然用户的集合信息也仅仅是返回的代理对象
目的是为了提高性能
解决方案:
迫切抓取连接 left join fetch 返回的是 List<持久化>
String hql = "select p from PetDiary p left join fetch p.pet ";
List<PetDiary> pl = session.createQuery(hql).list();
for(int i =0;i<pl.size();i++){
System.out.println(pl.get(i).getAuthorEmail());
}
不管你是访问多少属性 还是其他的,它始终只和数据库交互一次,性能上大大的得到提高
Pet pet = session.createQuery(hql).uniqueResult();
获得单个对象