一.数据库中多表之间的关系
1.多对多
使用中间表。
中间表只有俩个外键,引用俩个多对多表的外键。
不能有其他字段信息,至于中间表,应该用联合主键。
细节:任何一个多方的表和中间表去比较,都是一(中间表)对多(多表)的关系。
2.一对一(多对一或者一对多)
(1)第一种(一对多)
建立外键的方式。
使用外键约束,非空约束,唯一约束。
它是把外键字段加了非空约束和唯一约束,从而实现了一对一。
(2)第二种(多对一)
使用主键的方式。
让其中一张表即使主键,而是外键。
(3)如何确立俩表之间的关系
找外键。(主表和从表的区分)
二.多表映射配置的步骤
1.确定俩表之间的关系。
2.在数据库中实现俩张表的关系建立。
3.在实体类中描述俩个实体类之间的关系。
4.在映射配置文件中建立俩个实体和俩张表之间的关系。
三.实体类中的细节
1.说明
(1)细节一:hashSet
给从表创建集合属性时,使用hashSet集合。设置长度为0.
作用一:防止空指针异常。new hashSet集合。
作用二:防止消耗内存。设置长度为0.
(2)细节二:toString
实体类的toString方法不要加载主表属性或者从表集合属性。
2.范例
四.保存操作
1.一对多的配置文件
(1)主表
(2)从表
2.实体类
(1)主表
(2)从表
3.测试类
(1)初级【不推荐】
(2)中级【设置双向关系的管理inverse的演示】
(3)高级【级联操作,推荐】
五.级联修改
六.删除操作
1.说明
级联操作:删除操作
删除从表:单表操作
删除主表:
第一种情况:有从表引用
hibernate会设置主表和从表的外键引用为null,然后删除主表的数据。
特殊情况:
如果外键字段有非空约束,则hibernate不能更新外键字段为null,则会发生报错。【可以设置级联删除cascade="delete"】
解决方案:
手动删除从表的数据或者设置手动设置外键字段,再删除主表。
第二种情况:没有从表引用。
单表操作,直接删除。
2.注意事项
级联删除要慎用。