Hibernate对多个表进行查询时,
查询结果是多个表的笛卡尔积,或者称为“交叉”连接。例如:
from Student, Book
from Student as stu, Book as boo
from Student stu, Book boo
注意:让查询中的Student和Book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和Java对局部变量的命名规范是一致的。
建议通过MyEclipse进行生成这样就不会出太多的错注意表名要与类名同名
下面列举一个完整的例子来说明Hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tBookInfo和BookSelection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):
String sTest = "from tBookInfo book, BookSelection sel where book.id = sel.bookId";
Collection result = new ArrayList();
Transaction tx = null;

try ...{
Session session = HibernateUtil.currentSession();
tx = session.beginTransaction();
Query query = session.createQuery(sql);
result = query.list();
tx.commit();

} catch (Exception e) ...{
throw e;

} finally ...{
HibernateUtil.closeSession();
}
ArrayList sList = (ArrayList) result;
Iterator iterator1 = sList.iterator();

while (iterator1.hasNext()) ...{
Object[] o = (Object[]) iterator1.next();
tBookInfo bookInfo = (tBookInfo) o[0];
BookSelection bookSelect = (BookSelection) o[1];
System.out.println("BookInfo-Title: " + bookInfo.getTitle());
System.out.println("BookSelection-BookSelectionId: " + bookSelect.getId());
}
方法二

public List queryResoursOut() ...{
log.debug("queryResoursOut instance");
List list = new ArrayList();
ScrollableResults srs = null;
Session session = null;

try ...{
session = getSession();
srs = session.createQuery(
"select m.cname , t.cname , o.price , o.quantity "
+ "from ResourceModel m, ResourceType t, ResourceExist o"
+ " where m.id = o.modid and t.id = o.typeid and m.delflag =\'0\' and t.delflag = \'0\' order by o.typeid ").scroll();
// 将查询结果放入List保存

while (srs.next()) ...{
list.add(new ResourceOutTemp(srs.getString(0),
srs.getString(1), srs.getFloat(2), srs.getLong(3)));
}

} catch (HibernateException he) ...{

if (srs != null) ...{

try ...{
srs.close();

} catch (Exception e) ...{
;
}
}

} finally ...{

try ...{
session.close();

} catch (Exception e) ...{
;
}
}
return list;
}

ScrollableResults 是import org.hibernate.ScrollableResults;
提供的类,它可以为我们定制过虑输出列。