Hibernate一对多单向关联映射

来源:互联网 发布:东阳美工学徒招聘 编辑:程序博客网 时间:2024/06/09 20:55

                   一对多关联映射(单向)

 

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端设置才有效。
原创粉丝点击