Hibernate学习1:Hibernate注解CascadeType
Hibernate学习一:Hibernate注解CascadeType一.概念 现有一场景:一个管理员可以管理多个网吧,一个网吧可以
Hibernate学习一:Hibernate注解CascadeType
一.概念
现有一场景:一个管理员可以管理多个网吧,一个网吧可以被多个管理员管理。从中抽象出一个多对多的例子user-bar。主控方user:多对多里面里面会有第三张表user_bar,由主控方维护这里面的外键记录,也就是创建一个user的时候必须指定其管理的bar。被控方bar:没有权利更新外键记录。单独创建一个bar,不需要也不能指定其属于哪个user。
?
二. CascadeType
CascadeType.MERGE:级联更新。创建一个user的时候,指定其管理哪些bar,如果某一个bar不存在,会在创建user的时候一起创建。CascadeType.PERSIST:级联保存。创建一个user的时候,指定其管理哪些bar,如果某一个bar不存在,抛出异常。所以指定其管理哪些bar必须是事先存在的。CascadeType.REMOVE:级联删除。删除一个user的时候,会删除它管理的bar,最终是user_bar里面删了,bar里面也删了。如果不指定CascadeType.REMOVE,只删user_bar里面。CascadeType.REFRESH:级联刷新。第一次查询某一user和第二次查询同一user之间,删除了某一bar,CascadeType.REFRESH是的任何时候看到的都是最新的记录(两次查询结果不一样)。CascadeType.ALL:包含以上所有。
?
三. 使用
根据具体的场景要指定不同的Type。user和bar之间的关系,并没有说user不存在了,网吧就不存在,所以不能用CascadeType.REMOVE。保存一个user的时候,指定他能够管理的网吧必须是已经存在的,所以CascadeType.MERGE和CascadeType.MERGE中用CascadeType.MERGE。
?
四. 吐槽
???? 第一次接触CascadeType,去网上找资料的时候,NM,全部是一样的文章,甚至连错误都是一起copy过去的,真不赞同这样的学习方式。
?