草,网上的文档基本又是机翻。让我上!
目录
铺垫
设今有两表,一曰 user
,一曰 role
。
User (用户)
id | username | password |
---|---|---|
1 | 小明 | ************ |
Role(角色)
id | role |
---|---|
1 | 工人 |
2 | 农民 |
3 | 学生 |
那么为了关联起来,需要一个 user_role
表。
userId | username(冗余字段) | roleId |
---|---|---|
1 | 小明 | 1 |
1 | 小明 | 2 |
这表示 userId = 1
的用户(小明),其角色为工人和农民。
正文
CascadeType.REMOVE
现在小明因为背叛了工人阶级,做了工贼,要被删除。如果级联关系是 CascadeType.REMOVE
(移除) 那么小明被删除,关联的 roleId (1,2)也会被删除。
CascadeType.MERGE
小明醒了,原来是个梦。小明觉得自己的名字不吉利,因为“明”和“冥”同音,所以要改名叫小狗。如果级联关系是 CascadeType.MERGE
(归并),那么除了 user
表中会改名叫小狗,user_role
表也会同样变成小狗。
CascadeType.DETACH
当设置为 CascadeType.DETACH
(脱离)之后,小明无论怎么改名,在其他表中都改不了了。覆水难收也。
CascadeType.REFRESH
小狗改了名,打算重新做人,为了更好地建设共产主义,小狗打算把自己的职业改成学生,然后去人民大学深造。获取到自己的个人信息,打算重新填写的时候,由于改名审核不通过,小狗的名字被改回了小明。如果设置为 CascadeType.REFRESH
,那么小狗会先获取到自己改后的名字“小明”,之后才能修改自己的职业。这样避免了并发操作时的覆盖问题。
CascadeType.PERSIST
小明把自己改成学生的途中,发现自己的农民身份被剥夺了,如果开启了 CascadeType.PERSIST
权限,则小明保存之后,会保存现在引用的所有身份,包括被删除的农民身份。
CascadeType.ALL
表示上面都启用。