视频中截的图,在CRUD操作中,Cascade仅仅只是影响了非查询,而查询归Fecth管理.
如果双向关系中都设定Cascade为ALL的时候,码代码的确会省很多力气.做了一个小实验,一对多和多对一的双向关联,
在删除一的一方数据时,可以直接把所有多的一方关联的数据全部删掉. 平常我们删一个一的数据,总是要把和它关联的所有数据先删掉才可以删除,而双方都设Cascade为ALL后,删除一,自动就把所有和一关联的多删掉. 这也是正常思维的逻辑.
另外.Fecth...感觉作用不是太大.
对多的一方,默认为Eager、对一的一方默认为Lazy.
一般读取的时候,实际情况也就是默认值. 偶尔会有些特殊情况,比方说.读取某个用户数据的时候,想把这个用户的所有权限取出来,这个权限的数据...最多最多... 我算它100条...这时候把如果一的一方的Fecth值设为Eager就可以做到.
再就是图中说的几个"铁律"了,双向关系的设定,只是在编程中方便很多. 如果愣是不设,那也行.. 就一个一个set了.
mappedBy这个属性很有用!一对多和多对一的双向,需要映射到多的一方的引用,可是...mappedBy属性需要设置在一的一方@OneToMany(mappedBy="").................切记了! 多对多的双向, 在谁那都一样!
Fetch的铁律.不要两边都设Eager.其实默认值就是这样的.