首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Hibernate 多表關聯查詢實戰:HQL 笛卡兒積與結果映射技巧

     編輯:Java 程式設計入門

專案需求驅動,整理 Hibernate 多表關聯查詢核心模式,供快速參考。

Hibernate 與 JDBC 定位差異

  • Hibernate = JDBC 輕量物件封裝 + 獨立持久層框架,與 App Server/EJB 無強綁定,可全面取代 JDBC。
  • 相容性僅與 JDBC 驅動、資料庫相關,與上層應用無關。
  • 定位為 JDBC 替代者,非 Entity Bean 競爭者。

HQL 多表查詢語法

多表查詢產生笛卡兒積(交叉連接),再由 WHERE 條件過濾。

from Student, Book
from Student as stu, Book as boo
from Student stu, Book boo  // 別名首字母小寫為慣例

⚠️ 類名必須與實體類完全一致(含大小寫),非資料表名。

完整程式碼範例

String hql = "from tBookInfo book, BookSelection sel where book.id = sel.bookId";
List result = new ArrayList();
Transaction tx = null;
try {
    Session session = HibernateUtil.currentSession();
    tx = session.beginTransaction();
    Query query = session.createQuery(hql);
    result = query.list();
    tx.commit();
} catch (Exception e) {
    throw e;
} finally {
    HibernateUtil.closeSession();
}

for (Object[] row : result) {
    tBookInfo bookInfo = (tBookInfo) row[0];
    BookSelection bookSelect = (BookSelection) row[1];
    System.out.println("Title: " + bookInfo.getTitle());
    System.out.println("SelectionId: " + bookSelect.getId());
}

關鍵要點

  1. query.list() 回傳 List<Object[]>,陣列順序對應 HQL from 子句順序。
  2. 若需強型別 DTO,可用 select new DTO(book.title, sel.id) ... 建構子表達式。
  3. 大量資料考慮分頁(setFirstResult/setMaxResults)與唯讀查詢(setReadOnly(true))優化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved