jpa中orphanremoval技术的作用与属性详解
一、orphanremoval介绍与作用
上面截图的jpa的官方文档以及jpa规范中明确说明,如果javaBean中父实体和子实体之间有一对一或一对多的级联关系的时候,如果我们想要删除父实体,也必须要级联删除子实体,需要被删除的级联关系中的子实体则被称为孤儿实体。
orphanremoval属性的主要作用就是标记是否可以删除孤儿实体,假设我们这里有一个订单的案例,订单下面有许多行记录,假设我们删除其中的一行记录的话,需要被删除的这一行记录就被称作是孤儿,当我们设置这个属性为true的时候,意思就是我们可以从这个订单的所有记录中删除标记为孤儿的这条记录。
二、属性详解与案例代码
orphanremoval属性是JPA级联关系中非常重要的一个属性,通常删除子集数据时,都会在这个属性上作文章,如果想要删除子实体,需要调用子集中的clear方法删除。
如果java实体关系中没有设置属性,则调用子集列表的清除方法清除并中断关系,然后将数据库的子表数据中保存的主表ID设置为空并中断关系,具体应用详见下面的实体关系代码:
|
上面的代码是我们定义的两个具有实体关系的实体类,一个是用户类,另一个是用户地址类,一个用户可以有多个收货地址,所以用户与地址是一对多的级联关系。
接下来我们写代码做删除操作,需求是用户想要删除其收货地址,代码如下:
|
代码中我们设置了orphanremoval属性=true,只有该属性为真的情况下才能够将某个用户下的收货地址删除,假如该属性值为假,则断开用户与地址之间的关联关系,并且地址addresses集合应用变为null。
三、cascade 和orphanremoval的关系说明
首先二者的作用范围不一样,cascade的作用范围是数据库,当cascade属性设置了delete时,当删除级联关系中的子集时,顺便也会将数据库中对应的数据删除。
orphanremoval属性的作用范围仅仅是java应用代码中,做级联删除的操作也只适用于java实体代码范畴,它可以清楚javabean的级联关系,但并不能影响数据库的数据,只要cascade不点头是无法删除掉数据库的数据的。
相关文章推荐 |