簡體   English   中英

Hibernate / JPA-刪除具有@OneToMany關系的表(一個父級-0或多個相同類型的子級)違反了外鍵約束

[英]Hibernate/JPA - Delete table with @OneToMany relationship (one parent- 0 or more child of the same type) violates foreign key constraint

嘗試刪除與創建的表具有@OneToMany關系的表時出現問題
從同一java類使用

Query q = getEntityManager().createQuery("DELETE FROM " + entityClass.getSimpleName());
q.executeUpdate();

這是桌子:

    CREATE TABLE p_data_group
(
  data_group_id bigint NOT NULL,
  description character varying(350),
  description_eng character varying(350),
  multiplicity_max integer,
  multiplicity_min integer,
  name character varying(35),
  name_db character varying(30),
  name_eng character varying(35),
  name_xml character varying(35),
  path character varying(1024),
  "position" integer,
  is_root boolean,
  parent_group_id bigint,
  CONSTRAINT p_data_group_pkey PRIMARY KEY (data_group_id ),
  CONSTRAINT fk_data_group_parent_group_id FOREIGN KEY (parent_group_id)
      REFERENCES p_data_group (data_group_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE p_data_group
  OWNER TO postgres;

這是類中代表關系的部分:

@ManyToOne
@JoinColumn(name = "parent_group_id", insertable = false, updatable = false)
@XmlTransient
public DataGroup getParentDataGroup() {
    return parentDataGroup;
}

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "parent_group_id")
@ForeignKey(name = "fk_data_group_parent_group_id")
@Index(name = "idx_data_group_parent_group_id")
@LazyCollection(LazyCollectionOption.FALSE)
@XmlElementWrapper
public List<DataGroup> getChildDataGroups() {
    return childDataGroups;
}

現在,當嘗試刪除到根表時,也應根據CascadeStyle.ALL注釋刪除所有其他表:

PSQLException:錯誤:對表“ cpdm01”進行更新或刪除違反了表“ cpdm01_kodpkd”上的外鍵約束“ fk_cpdm01_kodpkd_cpdm01_id”詳細信息:密鑰(cpdm01_id)=(100)仍從表“ cpdm01_kodpkd”中引用。

我在這里嗎?

根據您的錯誤日志顯示

DETAIL: Key (cpdm01_id)=(100) is still referenced from table "cpdm01_kodpkd".

仍然有一條引用cpdm01_id 100的記錄。您可以刪除cpdm01_id = 100之前的cpdm01_kodpkd中的記錄,但也可能有其他記錄。 您必須刪除在maindorder中引用cpdm01_id 100的cpdm01_kodpkd中的所有記錄。 如果沒有,數據庫將保護您免受對數據的傷害。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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