一对一关联
1.一对一的单向主键关联:
例如两张表:Husband和wife,在数据库中设置彼此的主键id相互关联(少用)
此时在两个实体类中不用添加任何的对象属性
2.一对一的单向外键关联
例如两张表:Husband和wife
***在设计实体类时建立联系:
对象模型:只在Husband类中添加属性private Wife wife;并生成getter和setter方法,
如果不使用多表关联查询HQL语句,那么要进行多表查询需在Husband实体类中再添加private int wifeid;属性,这也是传统做法
关系模型:以Wife表为主导:
在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系
或者:
对象模型:只在Wife类中添加属性private Husband husband;并生成getter和setter方法,
如果不使用多表关联查询HQL语句,那么要进行多表查询需在Wife实体类中添加private int husbandid;属性,这也是传统做法
关系模型:以Husband表为主导:
在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
3.一对一的双向外键关联
对象模型:在Husband类中添加属性private Wife wife;并生成getter和setter方法,同时在
在Wife类中添加属性private Husband husband;并生成getter和setter方法
关系模型:两种主导关系建立任意一种即可,不必两种主导关系同时建:
以Wife表为主导:在Husband表中添加一个字段wifeid,该字段与wife表中的id建立关联关系或者
以Husband表为主导:在wife表中添加一个字段husbandid,该字段与husband表中的id建立关联关系
4.一对一双向主键关联—-(不重要,此处不再介绍)
———————————————————————————————-
总结:一对一单向和双向在数据库中的表现是一样的,区别体现在java程序中,单向只能找一次,双向可以相互找到
———————————————————————————————-
一对多和多对一关联 —- 原则:在多方添加外键
两张表:user表和group表
1.多对一的单向关联:
对象模型:根据在多方添加外键的构思:在多方User类中添加属性:private Group group;
关系模型:在user表中添加groupid字段,该字段和group表中的id关联
2.一对多的单向关联:
对象模型:在一的一方设置多方的集合属性:即在group中设置:private Set<User> users = new HashSet<User>();//此处最适合使用set集合,因为不会重复
关系模型:和多对一在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
3.多对一(一对多)的双向关联:
对象模型:在单方添加集合属性,在多方添加对象属性
关系模型:和单向在数据库的表现一致,同样遵循在多方设置外键的思想,即在user表中添加groupid字段,该字段和group表中的id关联
———————————————————————————————-
总结:数据库表现相同并遵循一个原则:在多方设置外键
———————————————————————————————-
多对多关联 — 增加中间表
两张表:teacher表和student表
1.多对多单向关联:
对象模型:在其中某一个实体类中设置set集合属性
关系模型:增加中间表,包含studentid和teacherid,并分别向两张表做关联
2.多对多双向关联:
对象模型:在两个实体类中均设置set集合属性
关系模型:和单向关联在数据库表现一致,增加中间表,包含studentid和teacherid,并分别向两张表做关联
———————————————————————————————–
总结:在数据库表现一致:增加中间表,类中设置set集合
———————————————————————————————–
———–之前的BBS项目中数据库表设计:
新闻表和评论表:
1.如果要先查询新闻再查询评论,则确定两张表为一对多关系
2.如果想在查询评论的时候查询它属于哪个新闻,则确定关系为多对一
到底是一对多还是多对一对在数据库中的表现没有影响,都是在多方设置外键,但是在java类中的表现不同,
是在一方添加set集合属性,还是在多方添加对象属性,这取决于关联关系,既然双向,单向在数据库中表现一致,
那么在java类中建议设置成双向关联。