读书人

怎么在JPA 1.0上实现OneToMany的delet

发布时间: 2012-10-30 16:13:35 作者: rapoo

如何在JPA 1.0下实现OneToMany的delete-orphan cascade策略

在JPA 1.0中,cascade的类型包含:MERGE, REFRESH, PERSIST, REMOVE, ALL

?

用过Hibernate的同学们都知道,以上类型和Hibernate的cascade相比,少了delete-orphan这种类型。而delete- orphan是很有用的,不知道为什么JPA 1.0并不支持。听说JPA 2.0将要加入,呵呵……总之,这再次证明了JPA 1.0的功能只是Hibernate功能的一个不完整的子集。

?

既然我们的项目选择了使用JPA 1.0,那么我们就需要找出在JPA 1.0下实现delete-orphan的方法。好在我们使用JPA的Hibernate实现(相信这也是大部分JPA使用者的使用方式),所以就有了以下的解决方法,也就是在Entity中加入Hibernate的Annotation:?

?

import javax.persistence.CascadeType;import javax.persistence.Entity;import javax.persistence.OneToMany;import javax.persistence.Table;import org.hibernate.annotations.Cascade;...@Entity@Table(name = "ORDERS")public class Order implements Auditable, Serializable{    ...       @OneToMany(mappedBy = "order", cascade = CascadeType.ALL)    @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)    private List<OrderItem> orderItems;       ...}

?

注意@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)这句。经测试后确认,加入这句后,JPA底层的Hibernate就会完成delete-orphan的动作,没有这句则不行。Hibernate确实够强大,发现JPA 的annotation不管用,如果发现自己的annotation,还是会自己搞定,牛……


灵感从这里来。

读书人网 >软件架构设计

热点推荐