composite-element的典型用法

composite-element的典型用法

1、情景描述

       顾客Customer下订单Order,Order里面包含很多条目Item及各条目的数量quantity信息。Customer和Order是一对多的关系;Order和Item是多对多的关系。

2、数据库结构

      orders表:{ orderId , orderName }                                                                                                                                  

      item表:{ itemId , itemName }

      order_item表:{ orderId , itemId , quantity }

3、Order.hbm.xml

< hibernate-mapping >
    
< class  name ="com.persistent.Order"  table ="orders" >
        
< id  name ="id"  column ="orderId"  unsaved-value ="null" >
            
< generator  class ="increment" ></ generator >
        
</ id >
        
< property  name ="name"  column ="orderName" ></ property >        
        
< set  name ="perchaseItems"  table ="order_item"  lazy ="false"  cascade ="save-update" >
            
< key  column ="orderId" ></ key >
            
< composite-element  class ="com.persistent.Perchase" >
                
< property  name ="quantity" ></ property >
                
< many-to-one  name ="item"  column ="itemId"  class ="com.persistent.Item"  lazy ="false" ></ many-to-one >
            
</ composite-element >
        
</ set >
    
</ class >
</ hibernate-mapping >

4、Item.hbm.xml

< hibernate-mapping >   
   
< class  name ="com.persistent.Item"  table ="item" >      
     
< id  name ="id"  column ="itemId"  unsaved-value ="null" >     
        
< generator  class ="increment" >         
        
</ generator >     
     
</ id >     
     
< property  name ="name"  column ="itemName" ></ property >              
   
</ class >
</ hibernate-mapping >

5、Order.java、Item.java和Perchase.java

public   class  Order  {
private Long id;
private String name;
private Set purchaseItems = new HashSet();
...
}


public   class  Item  {    
private Long id;
private String name;
...
}


public   class  Perchase  {    
private int quantity;
private Item item;
...
}

6、测试代码

Session session  =  HibernateSessionFactory.getSession();
session.beginTransaction();
List result 
=  session.createQuery( " from Order " ).list();    
for ( int  i  =   0 ; i < result.size(); i ++ ) {
        Order order 
= (Order)result.get(i);
        System.out.println(order.getId()
+"    "+order.getName());
        Set perchases 
= order.getPurchaseItems();
for(Iterator it = perchases.iterator(); it.hasNext();){
       Perchase perchase 
= (Perchase)it.next();
       System.out.print(perchase.getQuantity()
+"    ");
       System.out.println(perchase.getItem().getId()
+"  "+perchase.getItem().getName());
   }

}
  
session.getTransaction().commit();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值