一、设定cascade,fetch可以设定在持久化时对于关联对象的操作(cud是cascade,R归fetch管理)
二、cascade仅仅是帮我们省了编程的麻烦,不要把它的作用看得太大,cascade的属性指明做什么操作的时候关联对象是绑定在一起的(比如persist操作)
三、cascade的铁律
1、双向关系在程序中要设定双向关联(比如说多对一时,设置了一那一方的add,还必须设置多那方的set,不然多的那方就没有外键关联)
2、Hibernate建议在@ManytoOne中指定级联没什么意义,一般都是在@OnetoMany关系中比较有用,因为级联操作应该是由主表记录传播到从表;@ManytoOne不支持指定Hibernate的cascade,不过也可以直接用Hibernate的注解。
3、如果从表记录完全限制在主表记录之内,可以指定cascade=CascadeType.All,在配合orphanRemoval=TRUE即可
四、铁律:双向mappedBy(即在一对多双向时,在一对多的那方使用,其他的没关系,任何一方都行)
五、Fetch铁律:
1、铁律:Hibernate默认在多对一的那方使用eager,在一对多的那方使用lazy。
2、双向不要两边设置eager(会有多余的sql语句发出,即会把所有能关联到的对象都查出来)
3、对多方设置fetch的时候要谨慎,结合具体应用,一般用lazy不用eager,特殊情况(多方数量不多的可以考虑,提高效率的时候可以考虑)
六、要想删除或者更新,先做load,除了精确知道ID之外,还有就是直接用HQL语句
七、如果想消除关联关系,先设定关系为null,再删除对应记录,如果不删除记录,该记录就变成垃圾数据