Posted on 2012-05-10 14:23
a_alter 閱讀(109)
評論(0) 編輯 收藏 所屬分類:
hibernate
在 hibernate 中
table A (1) ----> (N) table B
如果在對A查詢中 沒有對table B的查詢條件時候 使用 fetchModal.join 即可獲得 table A相關 list B 信息。 sql 體現為 left out join table B
criteria.getCriteria().setFetchMode("poLines", FetchMode.JOIN);
SQLfrom
PO_ORDER this_
inner join
FO_FULFILL_TRX_STRING fofulfillt1_
on this_.AID=fofulfillt1_.AID_ORDER_PO
left outer join
PO_LINE polines4_
on this_.AID=polines4_.AID_ORDER
where
this_.AID_COMPANY=?
and (
fofulfillt1_.AID_COMPANY, fofulfillt1_.GROUP_NO, fofulfillt1_.SEQUENCE_NO
) in (
select
aid_company,
group_no,
sequence_no - 1
from
fo_fulfill_trx_string
where
aid_order_po = fofulfillt1_.AID_ORDER_PO
)
line 信息自動加載出來
- [*.*.model.PoLine@10a6ec4,*.*.*.model.PoLine@511358] -- 自動的實例化。
如果 你使用 opensessioninview 這樣的功能的話 會影響 fetchModel 的加載 (當 table B數據加載有條件的時候)
fetchModel 想表達的意思是 你獲取A的同時想同時獲取B的信息 --- 而不是應用于 同時獲取A和B 所以他的實現是left outer join 。
多層數據應對選擇合適的入口。 -- 更具業務
-- 試想 如下一個業務邏輯 要求查詢A對象 但是要求A對象下 List B 不能為空, 那么你就不能直接使用fetchMode 因為這樣查詢出來的A 不能保證 B的存在。