hibernate criteria fetchmodal
Posted on 2012-05-10 14:23 a_alter 閱讀(110) 評(píng)論(0) 編輯 收藏 所屬分類: hibernate在 hibernate 中
table A (1) ----> (N) table B
如果在對(duì)A查詢中 沒(méi)有對(duì)table B的查詢條件時(shí)候 使用 fetchModal.join 即可獲得 table A相關(guān) list B 信息。 sql 體現(xiàn)為 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
)
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 信息自動(dòng)加載出來(lái)
- [*.*.model.PoLine@10a6ec4,*.*.*.model.PoLine@511358] -- 自動(dòng)的實(shí)例化。
如果 你使用 opensessioninview 這樣的功能的話 會(huì)影響 fetchModel 的加載 (當(dāng) table B數(shù)據(jù)加載有條件的時(shí)候)
fetchModel 想表達(dá)的意思是 你獲取A的同時(shí)想同時(shí)獲取B的信息 --- 而不是應(yīng)用于 同時(shí)獲取A和B 所以他的實(shí)現(xiàn)是left outer join 。
多層數(shù)據(jù)應(yīng)對(duì)選擇合適的入口。 -- 更具業(yè)務(wù)
-- 試想 如下一個(gè)業(yè)務(wù)邏輯 要求查詢A對(duì)象 但是要求A對(duì)象下 List B 不能為空, 那么你就不能直接使用fetchMode 因?yàn)檫@樣查詢出來(lái)的A 不能保證 B的存在。