文章一:
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的包名。