delete join table rows cascade hibernate

时间:2017-12-18 07:05:25

标签: java postgresql hibernate many-to-many hibernate-cascade

I want to delete DATA from intermediate join tables. I am getting

update or delete on table "eoclass" violates foreign key constraint "fk_o5mbi65xmqv60x0m5v0l1raf8" on table "eostaff_user_eoclass" Detail: Key (primary_key)=(51) is still referenced from table "eostaff_user_eoclass".

Here is my Entity

@Entity
@Table(name = "EOSTAFF_USER")
@SequenceGenerator(name = "EOSTAFF_USER_SEQ", initialValue = 1, allocationSize = 1, sequenceName = "EOSTAFF_USER_SEQ")
public class EOStaffUser extends EOObject {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EOSTAFF_USER_SEQ")
    @Column(name = "PRIMARY_KEY")
    public long primaryKey;

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    public List<EOClass> eoClassArray = new LinkedList<>();
}

and

@Entity
@Table(name = "EOCLASS", uniqueConstraints = @UniqueConstraint(columnNames = { "eoinstitute_primary_key",
    "lkclass_primary_key", "lksection_primary_key", "lksubject_primary_key" }) )

@SequenceGenerator(name = "EOCLASS_SEQ", initialValue = 1, allocationSize = 1, sequenceName = "EOCLASS_SEQ")

public class EOClass extends EOObject {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "EOCLASS_SEQ")
    @Column(name = "PRIMARY_KEY")
    public long primaryKey;
 }

1 个答案:

答案 0 :(得分:0)

您不能简单地删除EOClass,因为Hibernate不会从连接表中删除记录。

对于您的映射,您需要加载EOStaffUser,从EOclass删除eoClassArray并合并整个EOStaffUser实体。