hibernate 一对多 一对一 ,多方与一方增删改查测试结果

 
——-------------------------------------------------------------------
  关于orcal表结构的外键的onDelete设置,如果这里配置了级联,在数据库中 主表删除数据,从表也一块删除,但从表删除主表不变。但这里配置了,实体没配置级联,程序还没法完成级联操作。程序配置了级联,这里不管设置成啥,都可级联删除。
一对一或者一对多,主表的实体关联属性的作用:1.相互包含,和从表一同保存。2.查询时候封装拿到从表的值。不能单方面set从表()保存。
一对一或者一对多,从表的实体关联属性的作用:1.相互包含,和主表一同保存。2.查询时候封装拿到主表的值。能单方面set主表()保存。
级联的作用:1.只有在相互包含一起保存的时候,胜率一方最后的保存步骤,没有级联大不了都保存呗。2.删除的时候,能同时删除关联的对方数据


1.一对一 外键  双向 一方级联
表结构:
B外键指向A主键
实体结构:
A B主键各自使用UUID自动生成
A放弃外键维护,配置级联
B方无级联配置
----------------------------------------------------------------------------
测试一方A保存:
A放弃外键维护,不管是否配置级联,A.setb 保存报错
A放弃外键维护,不管是否配置级联,A单独保存成功
@OneToOne(cascade=CascadeType.ALL),A.setb 保存报错,相互包含保存出错,A单独保存出错
@OneToOne A单独保存报错,A.setb报错, 相互包含报错


结论:一对一双向关联,A方为主表,首先A实体必须放弃外键维护权,不然怎么保存A,删除A,查询A都会报错。放弃了外键以后,就可以单独操作A表了 只能单独保存A(setb为null),但如果想同时保存B,就要相互包含,不同的是配置级联,最后只用saveA,没配置级联,saveA 再saveB
------------------------------------------------------------------------
测试一方删除:
@OneToOne 不放弃外键维护
保存 查询 没有建立关联的数据,根据id删除, 全报错
@OneToOne(mappedBy="a") 放弃外键维护 没级联
没有建立关联的数据,根据id删除成功
建立关系的数据,根据id删除失败(数据库外键设置的不能为空)
建立关系的数据,根据id删除失败(数据库外键设置的能为空,且外键的on delete 设置为set null)
 
@OneToOne(mappedBy="a",cascade=CascadeType.ALL) 放弃外键  配置及联
建立关系的数据,根据id删除成功,从表数据也一块删除
没有建立关联的数据,根据id删除成功


    结论:双向关联,一方首先放弃外键维护权,不然啥也干不了。放弃后,只能删除没建立关系的数据,配置级联后,就可以删除那些建立关系的数据了
----------------------------------------------------------------------------------------
测试一方查询:
只要放弃外键,就可以产寻,可以查到没关联的数据(实体b属性为空),也可以查到关联数据(实体b属性也封装好了)


------------------------------------------------------------------------------------
多方的操作,和一方什么配置没关系
测试多方保存
如果外键字段可为空,就可单独保存B(seta为null), 如果要setA(),不管是new的还是查的,a的id一定是A表中已经存在的,这样B.seta才能保存成功。如果想双向同时保存,那就相互包含。先保存A,再保存B,B方配置级联,最后只保存B即可
测试多方查询
根据id查询,自动给B中封装a属性的值,如果是单独数据,a就为null
测试多方删除
根据id删除,这个就是单表删除,如果配置级联,才会和主表一块删除


--------------------------------------------------------------------------
一对一外键单向关联:
1.一般让从表的实体保留关联属性,这样主表就是单表操作,从表实体可以利用关联属性,set主表()保存,利用关联属性查询封装主表值,但因为主表实体没有关联属性,不能通过实体操作完成相互包含一同保存。
从表实体保留关联属性:
主表正常单表查询,别考虑放弃外键什么的
主表正常单表保存
主表id删除,单独项正常删除,关联项不能删除(除非外键可为空,且Ondelete 为set null)
从表正常单表删除
丛表正常查询,封装A数据
保存就要seta的id了






如果主表方实体保留关联属性,主表不能set从表()保存,这是也不能相互包含一同保存。从表应为没有属性,没法set主表()保存,他们成了两张单独的表,失去实际意义。





























一对一主键双向关联
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值