專案需求驅動,整理 Hibernate 多表關聯查詢核心模式,供快速參考。
多表查詢產生笛卡兒積(交叉連接),再由 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());
}
query.list() 回傳 List<Object[]>,陣列順序對應 HQL from 子句順序。select new DTO(book.title, sel.id) ... 建構子表達式。setFirstResult/setMaxResults)與唯讀查詢(setReadOnly(true))優化。