Hibernate一对多单向关联映射

                   一对多关联映射(单向)

 

1、People.hbm.xml

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE hibernate-mapping 
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
< hibernate-mapping  default-lazy="false" >   
   
< class  name ="com.persistent.People"  table ="people" >      
     
< id  name ="id"  column ="peopleId"  unsaved-value ="0" >     
        
< generator  class ="increment" >         
        
</ generator >     
     
</ id >      
     
< property  name ="name"  column ="name" ></ property >      
     
< set  name ="addresses" >
        
< key  column ="peopleId"  not-null ="true" />
        
< one-to-many  class ="com.persistent.Address" />
     
</ set >      
   
</ class >
</ hibernate-mapping >

 

2、address.hbm.xml

 

 

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE hibernate-mapping 
        PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
< hibernate-mapping >
  
< class  name ="com.persistent.Address"  table ="address" >   
    
< id  name ="id"  column ="addressId"  unsaved-value ="0" >
        
< generator  class ="increment" >
        
</ generator >
    
</ id >
     
< property  name ="peopleId"  column ="peopleId"  
                    insert
="false"  update ="false" >
    
</ property >     
    
< property  name ="addressName"  column ="addressName" ></ property >
  
</ class >   
</ hibernate-mapping >

 

3、测试程序

 

  

Session session  =  HibernateSessionFactory.getSession();
session.beginTransaction();
List result 
=  session.createQuery( " from People " ).list();    
session.getTransaction().commit();
for ( int  i  =   0 ; i < result.size(); i ++ ) {
   People people 
= (People)result.get(i);
   System.out.println(people.getId()
+"    "+people.getName());
   Set addresses 
= people.getAddresses();
  
for(Iterator it = addresses.iterator(); it.hasNext();){
      Address address 
= (Address)it.next();
      System.out.println(address.getId()
+" "
                        
+address.getPeopleId()+" "
                        
+address.getAddressName());
   }

}
        

 

 

如果加了阴影部分,则运行结果为:

Hibernate: select people0_.peopleId as peopleId0_, people0_.name as name0_ from people people0_

Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?

Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?

1    lucy

2   1    Hubei Wuhan

1   1    Hunan Shaoyang

2    lily

如果不加阴影部分,则运行结果为

Hibernate: select people0_.peopleId as peopleId0_, people0_.name as name0_ from people people0_

1    lucy

Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?

1   1    Hunan Shaoyang

2   1    Hubei Wuhan

2    lily

Hibernate: select addresses0_.peopleId as peopleId1_, addresses0_.addressId as addressId1_, addresses0_.addressId as addressId1_0_, addresses0_.peopleId as peopleId1_0_, addresses0_.addressName as addressN3_1_0_ from address addresses0_ where addresses0_.peopleId=?

默认default-lazytrue,只有当程序中访问到PeopleAddresses时才会从数据库中加载。设置为false后,程序在加载People时立即就把它关联的Addresses全部加载进来。

另外,只有在People端设置才有效。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值