03. 关联关系映射(一对一)

本文详细介绍了在数据库和类结构中一对一关联关系的映射,包括一对一单向和双向关联,以及基于外键和主键的映射方式。通过Person和Passport的例子,展示了映射文件的具体配置和测试过程。
摘要由CSDN通过智能技术生成

关联关系映射

一对一关联关系

表结构中关系为一对一,那么类结构中也是一对一的关系。表结构层面上,一对一的关系都是双向的,从任何一侧表都可以访问到对方另一侧表中的内容。而类一对一的关联关系可以分为单向和双向两种。双向表示在两个关联的类中,都存放对方类信息,并提供相应的获取和设置方法;单向表示只在某一侧存放另一方的信息,我们只能从这一方去访问另一方,而不能从另一方访问这一方。

一对一单向关联关系

由于一对一单向关联关系稍微简单些,而且当我们清楚双向关联关系之后,单向的也自然清楚,所以此处省略。

一对一双向关联关系表结构

如Person和Passport

Person类中:id(Long),name(String),gender(String),age(Integer),passport(Passport)。并提供相应的get、set方法。

Passport类中:id(Long),bh(String),person(Person)。并提供相应的get、set方法。

  • 基于外键映射

    Persion表

    CREATE TABLE t_person{
        id NUMBER(10) PRIMERY KEY,
        name VARCHAR2(20) NOT NULL,
        gender VARCHAE2(10),
        age NUMBER(3),
        CHECK (age BETWEEN 1 and 100)
    };

    Passport表

    CREATE TABLE t_passport{
        id NUMBER(10) PRIMERY KEY,
        bh VARCHAR2(30) NOT NULL UNIQUE,
        person_id NUMBER(10) REFERENCES t_person(id) UNIQUE
    };
  • 基于主键映射

    Persion表(父表)

    CREATE TABLE t_person{
        id NUMBER(10) PRIMERY KEY,
        name VARCHAR2(20) NOT NULL,
        gender VARCHAE2(10),
        age NUMBER(3),
        CHECK (age BETWEEN 1 and 100)
    };

    Passport表(子表)

    CREATE TABLE t_passport{
        id NUMBER(10) PRIMERY KEY REFERENCES t_person(id),
        bh VARCHAR2(30) NOT NULL UNIQUE,
    };
一对一双向关联关系类结构
  • Person类

    public class Person{
         
        private Long id;
        private String name;
        private String gender;
        private Integer age;
        private Passport passport;
        ......
    }
  • Passport类

    public class Passport{
         
        private Long id;
        private String bh;
        private Person person;
        ......
    }
一对一双向关联关系的映射文件
  • 基于外键映射

    Person类映射(父表)

    前一个one可以认为是Person,后一个one是Passport。name属性值”passport“对应的是property而不是attribute,即此处的passport对应的是Person类中的getPassport和setPassport方法(按照标准的方式来生成的setter和getter方法)。property-ref是指参考引用,在Passport类中应该要有一个属性(此属性为property)为person。cascade表示级联,”all”值是指级联所有CRUD操作。

    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值