hibernate关系映射(1--1)

   Hibernate将表之间的关系映射成对象之间的关系

单向关系

1,1--1  (外键一对一,主键一对一)

2,1--N

3,N--1

4,N--N

双向关系

1,1--1

2,1--N(N--1)

3,N--N

 

 

(1) 1--1( 单向 外键一对一)

  

    基于外键关联的单向一对一关联 和单向多对一关联 几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。

第一步:// 数据库中创建表 表的关系映射

create table Person ( personId bigint not null primary key, addressId bigint not null unique )
create table Address ( addressId bigint not null primary key )

 

第二步:// 创建类, 对象的关系映射

// 人员类
public class  Person
{
private int id;
private Address address; // 包含了对方的引用 
}

//地址类
public class Address{
private int id;
}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

    <many-to-one name="address"   --本类中的属性名
        column="addressId"    --本类对应表中的列名
        class = "Address"    --本类所关联对方的类
        unique="true" --可以对对方的引用进行唯一性约束(一对一的关系),也可以不进行唯一性约束(对象之间多对一的关系)

        cascade = "all" -- 表明操作是否从父对象级联到被操作的对象
        not-null="true"/> -- 必须加上, 保证两个表的关系
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
</class>

 

第四步: 创建对象,保存到数据库

// 先创建被引用的对象
Address address = new Address();
// 创建引用对象,并给被引用的对象赋值
Person person = new Person();
person.address = address;
// 保存对象
 session.save(address); 
 session.save(person );

 

 

(2)1--1( 双向 外键一对一)

第一步:表的结构和【(1)单向 1--1(外键一对一)】的表结构是没有变化

第二步: 只是再Address中增加了Person的引用

 

// 人员类
public class  Person
{
private int id;
private Address address; // 包含了对方的引用 
}

//地址类
public class Address{
private int id;

// 增加了person对象的引用

private Person person;
}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

    <many-to-one name="address"   --本类中的属性名
        column="addressId"    --本类对应表中的列名
        class = "Address"    --本类所关联对方的类
        unique="true" --可以对对方的引用进行唯一性约束(一对一的关系),也可以不进行唯一性约束(对象之间多对一的关系)

        cascade = "all" -- 表明操作是否从父对象级联到被操作的对象
        not-null="true"/> -- 必须加上, 保证两个表的关系
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>

-- 增加了以下的xml配置

  <one-to-one name="person"  // 在本类中的属性名字

         class = "Person"    // 被引用对象的类名

         property-ref="address"/> // 关联类的属性名和本类的主键相对应
</class>

 

(3)1--1(单向 共享主键关联)

第一步:表的结构 :

create table Person ( personId bigint not null primary key )
create table Address ( addressId bigint not null primary key )

 

第二步:类的创建 对象之间关系映射

public class Person{

  private int personId;

}

 

public class Address{

 private int addressId ;

 private Person person; // 在表中没有映射的外键

}

 

第三步:xml配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
</class>

<class name="Address">
    <id name="id" column="addressId ">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>

    </id>


    <one-to-one name="person"    constrained="true"  -- 取值必须从外键中取 (必须加上)

       class="Person "  cascade="true" />
</class>

 

第四步:创建对象, 保存到数据库

Person person = new Person();  //创建被依赖的对象

 

Address address = new Address(); // 创建依赖对象

address.setPerson(person);

 

session.save(address ); // 保存依赖对象

 

(4)1--1(双向  共享主键关联)

第一步:表的结构 : 数据库和(3)是一样的

create table Person ( personId bigint not null primary key )
create table Address ( addressId bigint not null primary key )

 

第二步:类的创建 对象之间关系映射

public class Person{

  private int personId;

  private Address address; // 增加了address属性,但是在表中是没有映射字段的

}

 

public class Address{

 private int addressId ;

 private Person person; // 在表中没有映射的外键

}

 

第三步:xml的配置

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>

   <one-to-one  name="address" class="Address " cascade="true"/> //增加了one-to-one的配置
</class>

<class name="Address">
    <id name="id" column="addressId ">
        <generator class="foreign">
            <param name="property">person</param>
        </generator>

    </id>


    <one-to-one name="person"    constrained="true"  -- 取值必须从外键中取 (必须加上)

       class="Person "  cascade="true" />
</class>

 

第四步:创建对象保存数据库 保存对象书顺序是没有改变的 (要先保存自动生成主键的对象)

Person person = new Person();  //创建被依赖的对象

 

Address address = new Address(); // 创建依赖对象

address.setPerson(person);

 

session.save(address ); // 保存依赖对象

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值