级联策略:负责控制关联两端对象到对象的级联关系的操作,包括更新、删除等,也就是说对一个对象进行更新、删除时,其它对象也受影响,比如我删除一个对象,那么跟它是多对一关系的对象也全部被删除。
在前面用了抓取策略之后,后面试了一下级联操作的注解:cascadeType.MERGE方式
@OneToOne(cascade={CascadeType.MERGE}) @JoinColumn(name="company_id") publicCompany getCompany() { return company; } publicvoid setCompany(Company company) { this.company= company; }
CascadeType.MERGE级联更新,级联操作通常是对实体的增删改查的操作,而抓取策略体现的是关联对象,主要体现在查上面。
此外级联还有以下几种:
CascadeType.REFRESH:级联刷新,当多个用户同时作操作一个实体,为了用户取到的数据是实时的,在用实体中的数据之前就可以调用一下refresh()方法!
CascadeType.REMOVE:级联删除,当调用remove()方法会先删除主键表,再删除外键表!
CascadeType.MERGE:级联更新
CascadeType.ALL:包含以上所有级联属性。
以上几种级联操作,只能实在满足数据库的约束时才能生效。
这些策略,注解都是灵活配置的,有很多参数供我们选择,需要哪个类型的就直接拿过来用就可以了。很方便,设置哪个参数一目了然。
首先我声明一点,这个级联操作和我们之前理解的级联操作是一样的,只不过我们在这里用了注解的形式而已。现在这样用和我们以前用的区别是,以前我们是直接针对于数据库来的,如果是直接针对于数据库的话相当于是写死了;现在用Hibernate的注解的方式,是对象与对象之间的关系,面向对象了,更灵活了。如果是对象的操作的话那么我们的实体肯定是灵活的,不要写死,写死了感觉和之前的数据库的方式一样的。
虽然说级联的操作方便了我们对数据的操作,但是我们还是不能依赖于它,如果数据量特别大或者是多对多的关系,级联也会很慢。
原文:http://blog.csdn.net/liutengteng130/article/details/40659903