Hibernate對多表關聯查詢

由於公司項目的需要,我對Hibernate對多表關聯查詢研究了一下,現總結如下,供朋友參考。
一、 Hibernate簡介
Hibernate是一個JDO工具。它的工作原理是通過文件(一般有兩種:xml文件和properties文件)把值對象和數據庫表之間建立起一個映射關係。這樣,我們只需要通過操作這些值對象和Hibernate提供的一些基本類,就可以達到使用數據庫的目的。例如,使用Hibernate的查詢,可以直接返回包含某個值對象的列表(List),而不必向傳統的JDBC訪問方式一樣把結果集的數據逐個裝載到一個值對象中,爲編碼工作節約了大量的時間。Hibernate提供的HQL是一種類SQL語言,它和EJBQL一樣都是提供對象化的數據庫查詢方式,但HQL在功能和使用方式上都非常接近於標準的SQL。
 
二、 Hibernate與JDBC的區別
Hibernate與JDBC的主要區別如下:
1、      Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和App Server,和EJB沒有什麼必然的聯繫。Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate在任何場合下取代JDBC
2、      Hibernate是一個和JDBC密切關聯的框架,所以Hibernate的兼容性和JDBC驅動,和數據庫都有一定的關係,但是和使用它的Java程序,和App Server沒有任何關係,也不存在兼容性問題。
3、      Hibernate是做爲JDBC的替代者出現的,不能用來直接和Entity Bean做對比。
 
三、 Hibernate 進行多表關聯查詢
Hibernate對多個表進行查詢時,
 
 
 
查詢結果是多個表的笛卡爾積,或者稱爲“交叉”連接。例如:
from Student, Book
from Student as stu, Book as boo
from Student stu, Book boo
注意:讓查詢中的StudentBook均是表studentbook對應的類名,它的名字一定要和類的名字相同,包括字母的大小寫。別名應該服從首字母小寫的規則是一個好習慣,這和Java對局部變量的命名規範是一致的。
 
下面列舉一個完整的例子來說明Hibernate對多個表進行關聯查詢(其中粗體是我們要特別注意的地方,相應表tBookInfoBookSelection的結構和其對應的hbm.xmlclass文件就不一一列舉了,有需要詳細瞭解的朋友,請聯繫我):
 
        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());
        }
發佈了66 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章