Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA:如何删除单向多对多关系中的链接记录?_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA:如何删除单向多对多关系中的链接记录?

Hibernate JPA:如何删除单向多对多关系中的链接记录?,hibernate,jpa,Hibernate,Jpa,我有实体“活动”和“发票”的单向多对多映射。映射仅在活动实体中设置(我不需要从发票端访问活动) 当我运行这些代码时,我认为em将首先从联接表中删除记录,然后删除活动记录(发票记录应保持不变)。但是联接表中的记录从未被删除。我收到此外键错误: [STDOUT] Hibernate: delete from OP_ACTIVITY where OBJECT_ID=? [JDBCExceptionReporter] SQL Error: 1451, SQLState: 23000 ERROR [JD

我有实体“活动”和“发票”的单向多对多映射。映射仅在活动实体中设置(我不需要从发票端访问活动)

当我运行这些代码时,我认为em将首先从联接表中删除记录,然后删除活动记录(发票记录应保持不变)。但是联接表中的记录从未被删除。我收到此外键错误:

[STDOUT] Hibernate: delete from OP_ACTIVITY where OBJECT_ID=?
[JDBCExceptionReporter] SQL Error: 1451, SQLState: 23000 
ERROR [JDBCExceptionReporter] Cannot delete or update a parent row: a foreign key constraint fails (`prod/op_activity_invoice_xref`.......
我做错了什么?请帮忙,谢谢。

我想你需要
@manytomy(cascade={CascadeType.REMOVE})
选项

CascadeType.REMOVE:删除实体时,也删除实体 在这个领域举行

在活动中:

@ManyToMany(cascade = {CascadeType.REMOVE})
@JoinTable(name = "OP_ACTIVITY_INVOICE_XREF", joinColumns = @JoinColumn(name = "ACTIVITY_ID",  referencedColumnName = "OBJECT_ID"), inverseJoinColumns = @JoinColumn(name = "INVOICE_ID", referencedColumnName = "OBJECT_ID"))
private Set<Invoice> invoices;
或者,您可以在@PreRemove添加注释: 将以下方法添加到不是关系所有者的实体(发票)


尝试添加cascadeType.remove选项,但没有区别。它不会删除链接记录,因此我仍然会收到相同的错误。感谢您的帮助,我发现我的问题与其他问题有关。这是删除链接记录的正确方法(如我前面所说,我不想删除发票):
activity.getInvoices().clear();em.remove(活动)
[STDOUT] Hibernate: delete from OP_ACTIVITY where OBJECT_ID=?
[JDBCExceptionReporter] SQL Error: 1451, SQLState: 23000 
ERROR [JDBCExceptionReporter] Cannot delete or update a parent row: a foreign key constraint fails (`prod/op_activity_invoice_xref`.......
@ManyToMany(cascade = {CascadeType.REMOVE})
@JoinTable(name = "OP_ACTIVITY_INVOICE_XREF", joinColumns = @JoinColumn(name = "ACTIVITY_ID",  referencedColumnName = "OBJECT_ID"), inverseJoinColumns = @JoinColumn(name = "INVOICE_ID", referencedColumnName = "OBJECT_ID"))
private Set<Invoice> invoices;
for (Invoice invoice : activity.getInvoices()) {
   em.remove(invoice);
}
activity.getInvoices().clear();
em.remove(activity);
... flush() etc...
@PreRemove
private void removeInvoicesFromActivities() {
    for (Activity a : activities) {
        a.getInvoices().remove(this);
    }
}