Migarated from here at ‘2012-06-04 17:16:25’.
在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:
1 | import javax.persistence.CascadeType; |
注意@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)这句。经测试后确认,加入这句后,JPA底层的Hibernate就会完成delete-orphan的动作,没有这句则不行。Hibernate确实够强大,发现JPA 的annotation不管用,如果发现自己的annotation,还是会自己搞定,牛……
灵感从这里来。