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的存在。