博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转Hibernate 一对多关联的CRUD__@ManyToOne(cascade=(CascadeType.ALL))
阅读量:6425 次
发布时间:2019-06-23

本文共 3617 字,大约阅读时间需要 12 分钟。

一:Group和Users两个类

假定一个组里有n多用户,但是一个用户只对应一个用户组。

1.所以Group对于Users是“一对多”的关联关系@OneToMany

Users对于Group是“多对一”@ManyToOne

2.CRUD时候,希望是能从具体用户Users查到其对应的Group,反过来也能通过Group查到具体Users,所以是双向关联

(所以要用mappedBy去除冗余信息)

二:C增

cascade:级联,只影响cud,不影响r

(all全都级联,persist存储时级联,remove删除时级联)

如果没有设置cascade,默认需要save(Group)和save(users),两个都要存,设置级联之后,只存一个就行了

级联依赖于这句:@ManyToOne(cascade=(CascadeType.ALL))//需要依赖于其他的东西时候

设置好正反向之后,多个有级联关系的对象就一起被保存了

三:R查

默认会这样处理(平时管用的思路也是这样):

1.取“多”的时候,把“一”取出来

2.取“一”时,不取“多”的,用到时候再去取(看user信息时候一般看组名,看group时候user信息太多不必看)

fetch管读取,cascade管增删改

@OneToMany(mappedBy=”group”,cascade=(CascadeType.ALL),fetch=FetchType.EAGER)
@OneToMany默认的是LAZY,@ManyToOne默认是EAGER

User u = (User)s.get(User.class,1);

//取user时候,把group也取出来,

只取出Group的话,不会去查询里边的user

四:U更新

注意:fetch影响两者读取顺序(两边都设成EAGER要多取出一次),反正都要取,具体再试

@OneToMany,@ManyToOne都写cascade=(CascadeType.ALL)

update时候自动关联更新

 

五:D删

删多:实测只删掉目的项目,不关联其他

先load(就是select)一下,确认有之后,再删

没有遇到:不能直接s.delete(u),因为u和group有级联,group和所有users都有级联,一下就够给删掉了的情况

不过严谨起见,还是设置一个u.setGroup(null);比较好

HQL对应的语句(作用是一样的):s.createQuery(“delete from User u where u.id = 1”).executeUpdate();//User是类名

删一:如果有子项目,报错不让删除

Group g = (Group)s.load(Group.class,1);

s.delete(g);

转载地址:http://usyga.baihongyu.com/

你可能感兴趣的文章
百度地图2.0瓦片地址获取(窗口内瓦片)
查看>>
我的友情链接
查看>>
.JDK1.6安装配置后的测试
查看>>
判断闰年的函数
查看>>
pkill -9 nginx
查看>>
关于ASP.NET MVC4 Web API简单总结
查看>>
BGP最新的AS号:4-byte-as 转换为十进制及AS号兼容性
查看>>
Windows2008server R2 组策略批量更改本地管理员密码
查看>>
ubutnu安装geany
查看>>
webservice 之 Java CXF实战效果 RS WS(一)
查看>>
我的友情链接
查看>>
Repository 与 DAO
查看>>
Zabbix监控Windows主机
查看>>
IBM x3850 RAID5数据恢复方案及过程
查看>>
移动计算领域五大机遇:交通运输优势待挖掘
查看>>
如何把win7 旗舰版升级到sp1最新版本
查看>>
android 调用系统界面
查看>>
Software Enginering-------using git
查看>>
浅谈IP地址-1
查看>>
我的友情链接
查看>>