关联关系映射
一对一关联关系
表结构中关系为一对一,那么类结构中也是一对一的关系。表结构层面上,一对一的关系都是双向的,从任何一侧表都可以访问到对方另一侧表中的内容。而类一对一的关联关系可以分为单向和双向两种。双向表示在两个关联的类中,都存放对方类信息,并提供相应的获取和设置方法;单向表示只在某一侧存放另一方的信息,我们只能从这一方去访问另一方,而不能从另一方访问这一方。
一对一单向关联关系
由于一对一单向关联关系稍微简单些,而且当我们清楚双向关联关系之后,单向的也自然清楚,所以此处省略。
一对一双向关联关系表结构
如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操作。
<