-------------------------- 题记
1.若有关系,班级1-n学生,学生1-n衣服,在hbm配置文件中,都使用延迟加载,那么查班级,如何使用hql同时预加载学生和衣服呢?
2.hql中使用select 挑选多个属性/对象,如何分别取得其值?
看代码。。
-------------------------- 代码
code1:
//必须加上distinct
new String('select distinct s '+
'from Student s '+
'join fetch s.myClothes');
new String('select distinct c '+
'from MyClass c '+
'join fetch c.students s '+
'join fetch s.myClothes');
code2:
List<Object[]> list = getHibernateTemplate().find(
"select c,c.className from MyClass c");
for (Object[] objs : list) {
System.out.println(objs[0]);
System.out.println(objs[1]);
}
--------------------------- 注
如上code1中,挑选的对象必须加上distinct修饰,挑选出无重复的,因为使用预加载join fetch会有很多重复,具体原因也没仔细研究。
而code2中,经过hibernate封装出来的对象是List<Object[]>(即集合中存储了数组的引用),每个集合的元素(element)便是一个数组的引用,使用该引用(objs[0])便可以得到hql中select挑选出来的属性/对象了。