mappedBy的作用
2015-11-27 09:28
337 查看
mappedBy的意思就是“被映射”,即mappedBy这方不用管关联关系,关联关系交给另一方处理
1.规律:凡是双向关联,mapped必设,因为根本都没必要在2个表中都存在一个外键关联,在数据库中只要定义一边就可以了
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy的含义,应该理解为,拥有方能够自动维护 跟被拥有方的关系;
当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。
d) mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被 拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表
人跟***双向关联
在Person 里面定义的注解:
@OneToOne(cascade={CascadeType.ALL},optional=true)
public IDCard getIdCard() {
return idCard;
}
在IDCard 里面定义的注释:
@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard" , optional=false)
public Person getPerson() {
return person;
}
多了一个mappedBy这个方法,它表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的 ,这一点很重要 . Person表是关系的维护者,owner side,有主导权,它有个外键指向IDCard。
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让Person来维护整个关系,这样更符合我们正常的思维 .
我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有***的,但是一个***不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的***记录进数据库.
1.规律:凡是双向关联,mapped必设,因为根本都没必要在2个表中都存在一个外键关联,在数据库中只要定义一边就可以了
a) 只有OneToOne,OneToMany,ManyToMany上才有mappedBy属性,ManyToOne不存在该属性;
b) mappedBy标签一定是定义在the owned side(被拥有方的),他指向the owning side(拥有方);
c) mappedBy的含义,应该理解为,拥有方能够自动维护 跟被拥有方的关系;
当然,如果从被拥有方,通过手工强行来维护拥有方的关系也是可以做到的。
d) mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被 拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表
人跟***双向关联
在Person 里面定义的注解:
@OneToOne(cascade={CascadeType.ALL},optional=true)
public IDCard getIdCard() {
return idCard;
}
在IDCard 里面定义的注释:
@OneToOne(cascade=CascadeType.ALL,mappedBy="idCard" , optional=false)
public Person getPerson() {
return person;
}
多了一个mappedBy这个方法,它表示什么呢?它表示当前所在表和Person的关系是定义在Person里面的idCard这个成员上面的,它表示此表是一对一关系中的从表,也就是关系是在person表里面维护的 ,这一点很重要 . Person表是关系的维护者,owner side,有主导权,它有个外键指向IDCard。
我们也可以让主导权在IDCard上面,也就是让它产生一个指向Person的外键,这也是可以的,但是最好是让Person来维护整个关系,这样更符合我们正常的思维 .
我们也可以看到在Person里面IDCard是注释是optional=true,也就是说一个人是可以没有***的,但是一个***不可以没有人,所以在IDCard里面注释person的时候,optional就为false了,这样就可以防止一个空的***记录进数据库.
相关文章推荐
- Android中Context、Activity、Application之间有什么区别
- android漏洞分析(整理)
- java接入微信js-sdk
- Android 点击通知栏 跳转
- 用递归方式解析JSONObject 为HashMap
- ImageLoader的MyApplication
- Android-PopupWindow自定义的弹出框
- 实现android手机来电拦截系统页面弹出自定义页面特效
- android EditText 光标位置
- Android 退出程序的三种方
- Unity3D-粒子系统
- Android Lint配置
- android中listview优化的集中方法
- android项目下载完成跳到系统下载页面
- 控制必须微信浏览器打开
- 微信接口尝试
- iOS---设置btn边框
- Android-App Widgets
- UIApplicationDelegate 与 UIWindow 解析
- 第七次作业—微信用户体验