我有一個單向多對多的實體'活動'和'發票'映射。該映射僅在Activity實體中設置(我不需要從Invoice端訪問活動)。JPA:如何刪除單向多對多關係中的鏈接記錄?
@ManyToMany
@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;
插入和更新工作正常,但我有刪除活動的問題。該刪除的活動代碼如下:
activity.getInvoices().clear();
em.remove(activity);
當我運行這些代碼,我認爲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`.......
我在做什麼錯在這裏?請幫助,謝謝。
嘗試添加cascadeType.remove選項,但沒有區別。它不會刪除鏈接記錄,所以我仍然收到相同的錯誤。 – user3109865
嗯,是的,我更新了我的答案 –
感謝您的幫助,事實證明我的問題與其他問題有關。這是刪除鏈接記錄的正確方法(正如我之前所說的,我不想刪除發票): 'activity.getInvoices()。clear(); em.remove(activity);' – user3109865