Hibernate:CascadeType.REMOVE问题

时间:2014-07-02 05:20:32

标签: mysql hibernate

我正在开发一个RESTful Web应用程序(使用hibernate和mysql),其规格如下:

  1. 数据库中的两个表tableA和tableB。
  2. tableA包含名为col1A和col2A
  3. 的列
  4. tableB包含名为col1B,col2B和col1A的列;最后一列(col1A)是外键,映射到tableA的主键。
  5. 与表对应的JAVA类定义为:

    class tableA {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @XmlTransient
        private int col1A;
    
        private string col2A;
    
        // getters and setters
    }
    
    class tableB {
        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        @XmlTransient
        private int col1B;
    
        @XmlTransient
        @ManyToOne(cascade=CascadeType.REMOVE)
        @JoinColumn(name = "col1A", referencedColumnName = "col1A", insertable = false, updatable = false)
        private tableA tableAObj;
    
        private string col2B;
    
        // getters and setters
        // There is a getter and setter for the col1A field as well.
    }
    

    当我从tableA中删除一行时,我假设tableB中引用要删除的行的行应该自己删除(因为CascadeType.REMOVE)。但是,我得到以下异常:

      

    无法删除或更新父行:外键约束失败   (pack1tableB,CONSTRAINT FK27B8B255168D05 FOREIGN KEY   (col1A)参考tableAcol1A))

    我做错了什么?

    感谢。

    更新

    一些变化:我在tableA中添加了注释,如下所示:

     @XmlTransient
     @OneToMany(cascade=CascadeType.REMOVE, orphanRemoval=true)
     private List<Test> tableB;
    

    我仍然得到和以前一样的例外。

    我正在使用EntityManger的删除操作删除该行:

    em.remove(t)
    

1 个答案:

答案 0 :(得分:0)

知道了,在tableA中添加了mappedBy属性,如下所示:

@XmlTransient
@OneToMany(cascade=CascadeType.REMOVE, orphanRemoval=true, mappedBy = "tableAObj")
private List<TableB> tableB;