posts - 8, comments - 0, trackbacks - 0, articles - 11

hibernate criteria fetchmodal

Posted on 2012-05-10 14:23 a_alter 阅读(106) 评论(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);
SQL
from
        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的存在。


只有注册用户登录后才能发表评论。


网站导航: