`
Supanccy2013
  • 浏览: 213722 次
  • 性别: 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_Annotation关联映射

    多对一的配置方式有两种:(1)通过@JoinColoumn映像(2)通过关联表的方式来映像 (1) 通过@JoinColoumn映射 SRD Framework中Company,Category例子: Company: @ManyToOne @JoinColumn(name = "CATEGORY_OPTION_ID")...

    Hibernate+中文文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    HibernateAPI中文版.chm

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    hibernate3.2中文文档(chm格式)

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    Hibernate中文详细学习文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    Hibernate 中文 html 帮助文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...

    Hibernate教程

    8.4.1. 一对多(one to many) / 多对一(many to one) 8.4.2. 一对一(one to one) 8.5. 使用连接表的双向关联(Bidirectional associations with join tables) 8.5.1. 一对多(one to many) /多对一( many ...

    hibernate 体系结构与配置 参考文档(html)

    一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...

    Hibernate注释大全收藏

    这种策略支持双向的一对多关联,但不支持 IDENTIFY 生成器策略,因为ID必须在多个表间共享。一旦使用就不能使用AUTO和IDENTIFY生成器。 每个类层次结构一张表 @Entity @Inheritance(strategy=InheritanceType....

    最全Hibernate 参考文档

    7.4.1. 一对多(one to many) / 多对一(many to one) 7.4.2. 一对一(one to one) 7.5. 使用连接表的双向关联(Bidirectional associations with join tables) 7.5.1. 一对多(one to many) /多对一( many to ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) ...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...

    Hibernate3的帮助文档

    8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖...

    hibernate3.04中文文档.chm

    8.5.1. 一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖...

    hibernate 框架详解

    一对多(one to many) /多对一( many to one) 8.5.2. 一对一(one to one) 8.5.3. 多对多(many to many) 9. 组件(Component)映射 9.1. 依赖对象(Dependent objects) 9.2. 在集合中出现的依赖对象 ...

    Hibernate3+中文参考文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在集合中出现的依赖对象 ...

    Hibernate参考文档

    7.5.1. 一对多(one to many) /多对一( many to one) 7.5.2. 一对一(one to one) 7.5.3. 多对多(many to many) 7.6. 更复杂的关联映射 8. 组件(Component)映射 8.1. 依赖对象(Dependent objects) 8.2. 在...

    精通Hibernate:对象持久化技术第二版part3

    7.1 建立多对一的单向关联关系 148 7.1.1 [many-to-one]元素的not-null属性 153 7.1.2 级联保存和更新 155 7.2 映射一对多双向关联关系 156 7.2.1 [set]元素的inverse属性 161 7.2.2 级联删除 163 7.2.3 父子...

    Hibernate使用技巧汇总

    property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名 单向一对多需在一方配置,双向一对多需在双方进行配置 8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控...

    hibernate_reference中文文档.pdf

    1.2.2. 单向 Set-based 的关联 ......................................... 14 1.2.3. 使关联工作 ..................................................... 15 1.2.4. 值类型的集合 ..................................

Global site tag (gtag.js) - Google Analytics