Hibernate - 不删除子记录

时间:2012-06-11 12:46:17

标签: java hibernate annotations

我有两个表设置为父/子,例如公司和产品,如下所示 -

公司表: -

company_id,Company_name,creation_date

101,IBM,2010年5月12日

产品表: -

company_id,Product_id,Product_name

101,1001,Eclipse

101,1002,DB2

保存新的父级子公司(公司和产品)不是问题。当用户从公司对象中删除产品时,就会出现问题。

我在Company.java中有以下产品映射信息

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "COMPANY_ID",nullable=false)
@OrderBy(clause = "PRODUCT_NAME" )
@ForeignKey(name = "fk_company_product")     
private List<Product> products = new ArrayList<Product>();   

通过此映射,产品信息正在正确更新,但如果我从公司bean中删除产品并保存公司,则不会从Product表中删除产品信息。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

级联删除仅在您删除父级时有效。要使用注释处理删除,您应该使用:

  1. 如果您使用的是JPA 2.0:

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval=true)
    
  2. 如果您使用的是JPA 1.0,则可以使用hibernate注释:

    @OneToMany(CascadeType.DELETE_ORPHAN)