`
Supanccy2013
  • 浏览: 220805 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hibernate多对一单向关联的两种映射方法

阅读更多
多对一关系实现两种方法:
1,在多的一段添加1的主键作为外键。
2,多的一段不添加任何外键,重新建一个表来实现多对一的关联。

下面是实例:
1,Person类:
package com.supan.bean;
public class Person {
	//因为由人访问其地址,所有人必须有一个地址的引用
	private Integer id;
	private String name;
	private int age;
	private Address address;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
}  


2,Address类:
package com.supan.bean;
public class Address {
	//程序无须从address访问Person属性,所以Address无须增加Person属性
	private Integer addressId;
	private String  addressDetail;
	public Address() {
	}
	public Address(String addressDetail){
		this.addressDetail = addressDetail;
	}
	public Integer getAddressId() {
		return addressId;
	}
	public void setAddressId(Integer addressId) {
		this.addressId = addressId;
	}
	public String getAddressDetail() {
		return addressDetail;
	}
	public void setAddressDetail(String addressDetail) {
		this.addressDetail = addressDetail;
	}
}

3,Person映射文件
    <class name="Person" dynamic-update="true" table="myperson" dynamic-insert="true">
        <id  name="id"
             column="id" 
             type="integer">
            <generator class="native"/>
        </id>
        <property 
                name="name" 
                type="string" 
                column="name" 
                access="property"
                length="40"/>
        <property 
                name="age" 
                type="integer" 
                column="age" 
                access="property"/>
        <!-- 
                                 第一种方法:实现外键的方法来映射
             cascase可以让person在保存自己前自动保存address持久对象,如果没有
                                   这个属性,在保存person会手动的保存address
        <many-to-one name="address"
                     class="Address"
                     column="address_id">
        </many-to-one>
        -->
        
        <!--
	                     第二种方法:使用重建关联表的方法来实现 
	                     多对一的另一种实现方式:使用连接表,即不再多的一段添加一的外键,而是
	                     重新创建一个新表,这个表中存放连个字段一个是多的一段的主键,一个是1的
	                     一段的主键。
         -->
        <join table="person_address">
            <!-- 映射链接表中参照本表主键的外键列 -->
            <key column="person_id"></key>
            <many-to-one name="address" cascade="all" class="Address" column="address_id">
            </many-to-one>
        </join>
    </class>

4,address的映射文件:
    <class name="Address" dynamic-update="true" dynamic-insert="true">
        <id  name="addressId"
             column="address_id" 
             type="integer">
            <generator class="native"/>
        </id>
        <property 
                name="addressDetail" 
                type="string" 
                column="addressDetail" 
                access="property"
                length="240"/>
    </class>


5,测试程序(不管使用哪种方式,程序的访问方式不会改变)
    //Person 和 Address 是多对一的单向关联
    public void testPersonSave(){
    	Configuration cfg = new Configuration().configure();
    	SessionFactory sessionFactory = cfg.buildSessionFactory();
    	Session session = sessionFactory.openSession();
    	Transaction ts = session.beginTransaction();
    	System.out.println("111111111111111");
    	Person p = new Person();
    	p.setName("陈超阳");
    	p.setAge(26);
    	Address a = new Address("河南省汝州市");
        p.setAddress(a);
        session.persist(a);//如果配置文件中没有指定cascade为all的话,这里需要先保存address才能保存person;
        session.save(p);   //在Person映射文件中设置了cascade为all,表示保存person前会自动保存address的
        Address a2 = new Address("广东省深圳市");
        session.persist(a2);
        p.setAddress(a2);
        ts.commit();
        session.close();
        sessionFactory.close();
    }
分享到:
评论

相关推荐

    hibernate多对一单向关联关系实现源码

    在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...

    hibernate 单向多对多关联映射练习

    本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...

    hibernate一对多关联映射(单向关联)

    这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...

    Hibernate双向一对一关联映射(注解版)

    本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的数据库设计模式,用于处理两个实体之间一对一的关系。 在Hibernate中,一对一关联映射分为单向和双向。单向一对一映射通常涉及一个实体持有...

    Hibernate一对一唯一外键关联映射(单向关联)

    一对一关联分为两种类型:共享主键关联(Primary Key Join)和唯一外键关联(Unique Foreign Key Join)。在本例中,我们讨论的是后者,即通过一个独立的外键字段在两个表之间建立一对一的关系。 ### 2. 唯一外键...

    hibernate多对多单向关联

    总结来说,Hibernate中的多对多单向关联是一种高效的数据映射方式,它允许我们在不增加复杂性的情况下处理两个实体之间的复杂关系。通过学习和实践,开发者能够更好地掌握这种关联类型,从而在实际项目中灵活运用。

    hibernate主键实现一对一单向关联关系源码

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...

    hibernate多对多关联映射(单项关联)

    在Java的持久化框架Hibernate中,多对多关联映射是一种常见的关系模型,它用于处理两个实体类之间存在多个对应关系的情况。这篇博客"hibernate多对多关联映射(单项关联)"深入探讨了如何在Hibernate中实现这种映射...

    Hibernate一对一关联映射(注解)

    本话题主要探讨的是Hibernate中的一对一关联映射,这是一种将数据库中的单个表映射到Java对象模型中单个类的关系映射技术。通过注解方式实现一对一关联映射,可以避免传统的XML配置文件,使得代码更加简洁、易读。 ...

    Hibernate 一对一外键单向关联

    在Hibernate中,一对一(One-to-One)映射是一种常见的关联关系,它表示两个实体之间存在一对一的对应关系。本篇文章将深入探讨Hibernate中的一对一外键单向关联。 首先,一对一外键关联指的是一个实体通过外键直接...

    hibernate单向多对多映射(注解版)

    在Java的持久化框架Hibernate中,单向多对多映射是一种常见的关系映射方式,尤其在处理数据库中两个实体间复杂关联时显得尤为重要。在注解版的Hibernate中,我们不再需要传统的XML配置文件,而是直接在实体类上使用...

    Hibernate单向一对多关联映射(XML版)

    在本主题"Hibernate单向一对多关联映射(XML版)"中,我们将深入探讨如何使用XML配置来实现数据库中一个实体类对应多个实体类的关联关系。 在Hibernate中,一对多关联是一种常见的关系映射类型,它反映了数据库中的...

    hibernate外键实现一对一单向关联关系源码

    在本主题中,我们将深入探讨如何利用Hibernate实现一对一(One-to-One)单向关联关系,并通过源码分析来理解其工作原理。 **一对一关联关系**在数据库设计中表示两个表之间存在唯一的对应关系,例如,一个人可能...

    Hibernate多对多单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对多(Many-to-Many)关联是一种常见的关系映射类型,它用于表示两个实体之间可以有多个对应的关系。本篇将详细讲解如何使用Hibernate实现多对多单向关联,包括注解(Annotation)...

    hibernate一对一主键关联映射(双项关联)

    在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是一种常见的关系映射方式,用于表示两个实体之间一对一的对应关系。本篇主要探讨的是基于主键(Primary Key)的双向关联映射,这在实际项目中非常常见...

    hibernate03:多对一单向关联、多对一双向关联

    本文主要探讨的是Hibernate中的两种关联关系:多对一单向关联和多对一双向关联。通过理解这两种关联方式,我们可以更好地设计和实现复杂的数据库模型。 首先,我们来看**多对一单向关联**。这种关联意味着一个实体...

    Hibernate 关联关系映射分类

    综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...

    Hibernate多对一单向关联(annotation/xml)

    在Java的持久化框架Hibernate中,多对一的单向关联是一种常见的关系映射方式,它主要用于处理数据库中两个实体间的一种关联关系。在这种关系中,一个实体(多个实例)可以与另一个实体(单个实例)相关联。本文将...

    Hibernate关联映射-one to one单向外键关联

    本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...

Global site tag (gtag.js) - Google Analytics