Hibernate一对多单向关联映射

原创 2007年10月15日 19:17:00

                   一对多关联映射(单向)

 

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    HubeiWuhan

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    HubeiWuhan

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端设置才有效。

【SSH进阶之路】Hibernate映射——多对一单向关联映射(四)

基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月22日 08:15
  • 31017

hibernate5(9)注解映射[1]多对一单向关联

在实际的项目开发中,我们常常需要建立我们实体类间的复杂关系,比如在一个博客网站中,用户会写文章,则文章与用户的关系就是多对一的映射关系。 现在先看一个配置实例:我们的文章实体类package com...
  • qwe6112071
  • qwe6112071
  • 2016年04月07日 19:52
  • 3932

【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)

两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应。例如:一个人(Person)只有一张身份证(IdCard)。...
  • jiuqiyuliang
  • jiuqiyuliang
  • 2014年10月23日 08:15
  • 23470

一口一口吃掉Hibernate(五)——一对多单向关联映射

在上一篇博客《一口一口吃掉Hibernate(四)——多对一单向关联映射》中,介绍了多对一的关联映射,今天就反过来说一下一对多的单向关联映射。       可能有人会对这2篇博客的题目有点混淆不清...
  • xiaoxian8023
  • xiaoxian8023
  • 2013年10月31日 08:17
  • 5289

Hibernate从入门到精通(八)一对多单向关联映射

上次的博文Hibernate从入门到精通(七)多对一单向关联映射我们主要讲解了一下多对一单向关联映射,这次我们继续讲解一下一对多单向映射。 一对多单向关联映射         在讲...
  • qq_31387691
  • qq_31387691
  • 2016年10月10日 17:10
  • 189

Hibernate从入门到精通(八)一对多单向关联映射

上次的博文Hibernate从入门到精通(七)多对一单向关联映射我们主要讲解了一下多对一单向关联映射,这次我们继续讲解一下一对多单向映射。...
  • zs15932616453
  • zs15932616453
  • 2013年07月22日 07:57
  • 10823

hibernate之关于一对多单向关联映射

【hibernate】之关于一对多单向关联映射!
  • u010506940
  • u010506940
  • 2014年10月28日 10:33
  • 781

Hibernate一对多单向关联和双向关联映射方法及其优缺点

Hibernate一对多单向关联和双向关联映射方法及其优缺点 本文由arthinking发表于3年前 | J2EE | 暂无评论 |  被围观 5,750 views+ 一对多关...
  • qwe1230986
  • qwe1230986
  • 2014年01月20日 11:04
  • 926

Hibernate一对多单向关联和双向关联映射方法及其优缺点

一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。 它们的区别在于维护的关系不同: 一对多关联映射是指在加...
  • liangoo7
  • liangoo7
  • 2012年10月14日 17:30
  • 5132

Hibernate一对多单向关联和双向关联映射方法及其优缺点

一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。 它们的区别在于维护的关系不同: 一对多关联映射是指在加...
  • u011936251
  • u011936251
  • 2017年08月02日 16:52
  • 175
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate一对多单向关联映射
举报原因:
原因补充:

(最多只允许输入30个字)