[英]More problems with JPA deletion of row in database
我有以下代碼定義了三個表之間的關系。
public class Attachment implements Serializable {
@Id
@Column(name="attachment_id")
private int attachmentId;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="reference_id")
private Reference reference;
@OneToMany(mappedBy="attachment")
private List<Reference> references;
MORE STUFF;
}
public class Uuid implements Serializable {
@Id
@Column("name=uuid_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int uuidId;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="reference_id")
private Reference reference;
MORE STUFF
}
public class Reference implements Serializable {
@Id
@Column(name="reference_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int referenceId;
@OneToMany(mappedBy="reference")
private List<Attachment> attachments;
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="attachment_id")
private Attachment attachment;
@OneToMany(mappedBy="reference")
private List<Uuid> uuids;
MORE STUFF
}
我還有更多代碼來選擇需要刪除的特定“ uuid”對象/行,並且想法是其他表中由於它們共享相同的reference_id而需要刪除的所有內容也應刪除。 執行此操作的代碼是:
try {
final EntityTransaction transaction = em.getTransaction();
transaction.begin();
em.remove(data);
transaction.commit();
} catch (final PersistenceException e) {
throw new CPDPersistenceException(e);
}
執行刪除操作時,將引發異常“無法刪除或更新父行:外鍵約束失敗。我之前在此方法的變體中發布了一些內容。有人有任何想法嗎?謝謝您的時間。
您在Reference
和Attachment
之間定義了一對多關系,但在Reference
和Attachment
之間(以及對與對)之間存在多對一關系,這將永遠無法實現。 您應該擁有其中之一,而不是兩者都有,或者是多對多關系。
解決此問題,刪除對象應該更容易。
例如:
public class Attachment implements Serializable {
@Id
@Column(name="attachment_id")
private int attachmentId;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="reference_id")
private Reference reference;
//MORE STUFF;
}
public class Reference implements Serializable {
@Id
@Column(name="reference_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int referenceId;
@OneToMany(mappedBy="reference")
private List<Attachment> attachments;
@OneToMany(mappedBy="reference")
private List<Uuid> uuids;
/bMORE STUFF
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.