[英]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.