hibernate 双向关联(为什么不死循环)

本文是想通过例子,证明hibernate双向多对多的情况下,为什么相互依赖了,还没有死循环。(可以下载例子 http://pan.baidu.com/s/1skjYSZb)

customers : orders = n : n,中间的关系表是 customers_orders_link。

Customers 类:

     private Long id;
     private String userName;
     private Set orders = new HashSet();

Orders 类:
     private Long id;
     private String orderDescription;
     private Set customers = new HashSet();

Customers 表



Orders表



customers_orders_link表


测试函数:
Customers customers = (Customers) session.get(Customers.class, 7);


后台执行的sql:

1.查找custormer通过的id

    select		
        customers0_.ID as ID0_0_,		
        customers0_.userName as userName0_0_ 		
    from		
        customers customers0_ 		
    where		
        customers0_.ID=7		


2.查找当前custormer的所有orders

    select			
        orders0_.cid as cid1_,			
        orders0_.oid as oid1_,			
        orders1_.ID as ID2_0_,			
        orders1_.orderDescription as orderDes2_2_0_ 			
    from			
        customers_orders_link orders0_ 			
    left outer join			
        orders orders1_ 			
            on orders0_.oid=orders1_.ID 			
    where			
        orders0_.cid=7			


3. 循环2中的order,获取每个order管理的所有custormers

Hibernate: 
    select			
        customers0_.oid as oid1_,			
        customers0_.cid as cid1_,			
        customers1_.ID as ID0_0_,			
        customers1_.userName as userName0_0_ 			
    from			
        customers_orders_link customers0_ 			
    left outer join			
        customers customers1_ 			
            on customers0_.cid=customers1_.ID 			
    where			
        customers0_.oid=8			
Hibernate: 			
    select			
        customers0_.oid as oid1_,			
        customers0_.cid as cid1_,			
        customers1_.ID as ID0_0_,			
        customers1_.userName as userName0_0_ 			
    from			
        customers_orders_link customers0_ 			
    left outer join			
        customers customers1_ 			
            on customers0_.cid=customers1_.ID 			
    where			
        customers0_.oid=9			
Hibernate: 			
    select			
        customers0_.oid as oid1_,			
        customers0_.cid as cid1_,			
        customers1_.ID as ID0_0_,			
        customers1_.userName as userName0_0_ 			
    from			
        customers_orders_link customers0_ 			
    left outer join			
        customers customers1_ 			
            on customers0_.cid=customers1_.ID 			
    where			
        customers0_.oid=11			


4.获取3结果中custormers,并且该custormers前期没有加载过,已经加载过的不再查询。(因为此处所以没有死循环

    select	
        orders0_.cid as cid1_,	
        orders0_.oid as oid1_,	
        orders1_.ID as ID2_0_,	
        orders1_.orderDescription as orderDes2_2_0_ 	
    from	
        customers_orders_link orders0_ 	
    left outer join	
        orders orders1_ 	
            on orders0_.oid=orders1_.ID 	
    where	
        orders0_.cid=10	





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值