簡體   English   中英

JPA刪除數據庫中行的更多問題

[英]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);
}

執行刪除操作時,將引發異常“無法刪除或更新父行:外鍵約束失敗。我之前在此方法的變體中發布了一些內容。有人有任何想法嗎?謝謝您的時間。

您在ReferenceAttachment之間定義了一對多關系,但在ReferenceAttachment之間(以及對與對)之間存在多對一關系,這將永遠無法實現。 您應該擁有其中之一,而不是兩者都有,或者是多對多關系。

解決此問題,刪除對象應該更容易。

例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM