上一章讲到了基于Annotation的一对一单向外键映射,现在来学习一下一对一双向外键映射。基本方法和单向外键映射是一样
的,直接在另一个类中也加上@oneToOne这个annotation即可。但是需要注意的是,如果仅仅是这样的话,会生成两条外键约束,很
没有必要,因此我们在被拥有方的@oneToOne注解中加入mappedBy属性并设置为拥有方的关联属性名即可。
1>只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
2>mappedBy标签一定是定义在被拥有方的,他指向拥有方;
3>mappedBy的含义,应该理解为,拥有方能够自动维护跟被拥有方的关系,当然,如果从被拥有方,通过手工强行来维护拥有
方的关系也是可以做到的;
4>mappedBy跟joinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥
有了被拥有方。mappedBy这方定义JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表。
eg:Manager.java
@OneToOne()
@JoinColumn(name="man_id",referencedColumnName="manager_id")
public Manager_Msg getManager_msg() {
return manager_msg;
}
(referencedColumnName未设置时,默认为另一个表的主键)
Manager_msg.java
@OneToOne(mappedBy="manager_msg")
//@JoinColumn(name="msg_id") 已经失效
public Manager getManager() {
return manager;
}
该设置方式表明主导权在Manager,由Manager对象的manager_msg属性来主控