【问题标题】:Hibernate - Child records are not being deleted休眠 - 未删除子记录
【发布时间】:2012-06-11 12:46:16
【问题描述】:

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

公司表:-

公司 ID、公司名称、创建日期

101,IBM,2010 年 5 月 12 日

产品表:-

company_id, Product_id, Product_name

101、1001、日食

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 中删除产品并保存公司,则产品信息不会从产品表中删除。

感谢您的帮助。

【问题讨论】:

    标签: java hibernate annotations


    【解决方案1】:

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

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

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

      @OneToMany(CascadeType.DELETE_ORPHAN)
      

    【讨论】:

    • 我想通过注解映射来实现
    • 所以如果我从产品列表中删除产品并保存公司,那么我们会从产品表中删除产品吗?
    • 是的,应该是这样的。
    • 你试过什么?您收到错误还是只是忽略了删除?另外,您使用什么版本的 hibernate 和 jpa?
    • JAP 2.0 和 Hibernate 3.3.2。不抛出任何异常,只是在更新父级时忽略子级删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    相关资源
    最近更新 更多