十、一对一关联

1    一对一单向外键关联
Annotation: 在被约束表字段的get方法上加@0ne20ne @JoinColumn
            @OneToOne
            @JoinColumn(name="wifeid", unique = true) //指定生成的数据库字段名,以及设置唯一性
            public Wife getWife() {
                return wife;
            }


2     一对一双向外键关联
Annotation: @0ne20ne(mappedBy=”…”)
    规律:凡是双向关联,必设mappedBy
        在Wife类中 写Husband对象属性 并添加注解@OneToOne(mappedBy="wife") mappedBy作用
是指定这个一对一关联是被Husband类的 wife属性(准确说是getWife方法)做的映射
@OneToOne(mappedBy="wife")
        public Husband getHusband() {
        return husband;
        }
        在 类中写Wife对象属性
            @OneToOne
            @JoinColumn(name="wifeid") //指定生成的数据库字段名
            public Wife getWife() {
                return wife;
            }
        此注释将由Husband表中生成wifeid字段作为fk外键,wife表中不生成额外的Husbandid字段

特别说明: 一对一单向外键关联与一对一双向外键关联在数据库的表的格式是一样的,区别在于
java程序中. 双向外键关联可通过Hibernate在两个类间互相调用彼此,而单向外键关联只能单方向调用.

 

3    一对一单向主键关联(不重要)
@primaryKeyJoinColumn

4    一对一双向主键关联(不重要)
@primaryKeyJoinColumn

 

5    联合主键
   @JoinColumns
    Wife类中建立联合主键,建立方式参考 ID生成策略中的联合主键部分
    Husband类中写Wife对象属性,并在其get方法上写@OneToOne即可完成一对一外键映射
    若想要指定生成的外键名 则需使用@JoinColumns注解,如下:
    @OneToOne
    @JoinColumns( { @JoinColumn(name = "wifeid", referencedColumnName = "id"),
            @JoinColumn(name = "wifename", referencedColumnName = "name") })


    @JoinColumns用于在一对一外键关联存在联合主键情况时指定生成的外键字段名称
    @JoinColumns的参数为@JoinColumn数组 @JoinColumn内除需指定name属性外还需指定
    referencedColumnName属性值 作用是可指定生成的字段名所对应的目标表字段名
    public Wife getWife() {……}

 

        生成sql语句如下:

        alter table Husband
        add index FKAEEA401BC089B209 (wifeId, wifeName),
        add constraint FKAEEA401BC089B209
        foreign key (wifeId, wifeName)
        references Wife (id, name)

你可能感兴趣的:(关联)