hibernate映射----一对一关联映射

一、映射类型

  1. 一对多(one-to-many)
  2. 多对一(many-to-one)
  3. 一对一(one-to-one)
  4. 多对多(many-to-many)

二、一对一关联

有两种策略可以实现一对一的关联映射
  1. 主键关联:即让两个对象具有相同的主键值,以表明它们之间的一一对应的关系;数据库表不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联
  2. 唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制之后,也可以用来表示一对一关联关系;

1、一对一主键关联单向

两个对象之间是一对一的关系,如Person-IdCard

hibernate映射----一对一关联映射_第1张图片
image.png
原理:

让两个实体对象的id保持相同
生成的t_person表的主键id 作为t_idcard表的外键
( t_person表的主码id 取自t_idcard表的主码)

IdCard类
public class IdCard {
    private int id;
    private String cardNo;
关联映射






Person类
public class Person {
    private int id; 
    private String name;
                private IdCard idCard
关联映射

 
   
 
   idCard
    
   
    
 

 
生成的SQL语句如下:
create table t_idcard (id integer not null auto_increment, cardNo varchar(255), primary key (id))
create table t_person (id integer not null, name varchar(255), primary key (id))
    alter table t_person add index FK785BED802591D1EF (id), add constraint FK785BED802591D1EF foreign key (id) references t_idcard (id)

2、一对一主键关联双向

hibernate一对一主键关联映射(双向关联Person<---->IdCard)

  • 需要在idcard映射文件中加入标签指向person,指示hibernate如何加载person
  • 默认根据主键加载
  • 需要在idcard类中加入对Person类的引用
hibernate映射----一对一关联映射_第2张图片
image.png
Person类
public class Person {
private int id;
private String name;
private IdCard idCard; 
. . . . . .
关联映射



idCard





IdCard类
public class IdCard {
private int id;
private String cardNo;
private Person person;
. . . . 
关联映射







3、一对一唯一外键关联单向

hibernate映射----一对一关联映射_第3张图片
image.png

hibernate一对一唯一外键关联映射(单向关联Person---->IdCard)
一对唯一外键关联映射是多对一关联映射的特例
可以采用标签,指定多的一端的unique=true,这样就限制了多的一端的多重性为一
通过这种手段映射一对一唯一外键关联

Person类
public class Person {
   private int id; 
   private String name;
               private IdCard idCard
关联映射







IdCard类
public class IdCard {
    private int id;
    private String cardNo;
关联映射






4、一对一唯一外键关联双向

hibernate映射----一对一关联映射_第4张图片
image.png

说明:
hibernate一对一唯一外键关联映射(双向关联Person<---->IdCard)
一对一唯一外键关联双向,需要在另一端idcard类中加入对Person的引用
一对一唯一外键关联双向,需要在另一端(idcard),添加标签,指示hibernate如何加载其关联对象,默认根据主键加载person,外键关联映射中,因为两个实体采用的是person的外键维护的关系,所以不能指定主键(id)加载person(默认),而要根据person的外键(idCard)加载,所以采用如下映射方式:

Person类

public class Person {
private int id;
private String name;
private IdCard idCard; 
 . . . . . .
映射文件







IdCard类
public class IdCard {
    private int id;
    private String cardNo;
    private Person person;
. . . . . .
映射文件







你可能感兴趣的:(hibernate映射----一对一关联映射)