文章一:

1.用hql語句

`
 String hql="select student.id, student.name ,class.name from student映射實體類名 as student , class映射實體類名 as class where class.id = student.classid ";

`

2.用本地SQL語句

`
 String sql="select student.id, student.name, class.name from student join class on class.id = student.classid ";SQLQuery query=HibernateSessionFactory.getSession().createSQLQuery(sql);
 `

也可以進行查詢

返回類型為數組。

文章二:

Hibernate 是JDBC的輕量級封裝,一款傑出的ORM框架。通過它,可以建立數據表與表對象間的聯繫。
          Hibernate的查詢可通過HQL 和Criteira實現。本文僅展示用HQL實現多表查詢,並針對返回的結果集進行對象封裝。
        
          如果我們在Hibernate中需要查詢多個表的不同字段,那麼如何來獲取Hibernate多表查詢的結果呢?有兩種方式:

1、 利用Hibernate重寫的List,從Obeject[ ]中取各個字段分別轉化成對應類型,如下:

Java代碼:

`
 Query q = session.createQuery(" select members, classInfo.className " +
 " from Members members, ClassInfo classInfo " +
 " where members.level = classInfo.classCode ");List result = q.list();
Iterator it = result.iterator();
while (it.hasNext()) {
Object[] tuple = (Object[]) it.next();
Members members = (Members) tuple[ 0 ];
String className = (String) tuple[ 1 ];
}
 `


這是獲取Hibernate多表查詢的結果的最常用的方式,利用Hibernate為了實現懶加載重寫所有Collection接口實現。

2、構造自己的複合類型,如下:

Java代碼:

`
 Query q = session.createQuery(" select new ${path}.NewMembers(members, classInfo.className) " +
" from Members members, ClassInfo classInfo " +        

" where members.level = classInfo.classCode ");Query q = session.createQuery
(" select new NewMembers(members, classInfo.className)
" + " from Members members, ClassInfo classInfo " + "
where members.level = classInfo.classCode ");
`


當然我們需要有一個NewMembers類和相應的構造方式。
需要特別指出的是,定義的複核類型NewMembers務必要實現java.io.Serializable接口,定義相應的構造方法:一個默認不帶參數的,一個根據需要帶參數的(通常是全參,呵呵,因為本身成員變量就是量身定製);此外,在使用中,發現必須指定自定義類型的完整類名${path}.NewMembers,${path}為NewMembers的包名。