当前位置:编程学习 > JAVA >>

关于hibernate的级联删除,在线等大牛解答

数据表有
CREATE TABLE review
(
  review_id bigint NOT NULL,
  review_content character varying(310),
  creator_id bigint,
  project_date timestamp without time zone,
  relationship_id bigint,
  project_adress character varying(255),
  project_price bigint,
  is_confirmed character(255),
  state character varying(255),
  reference_id bigint,
  added_date timestamp without time zone,
  edited_date timestamp without time zone,
  professional_id bigint,
  review_mark bigint,
  CONSTRAINT review_pkey PRIMARY KEY (review_id ),
  CONSTRAINT fk91b3e37875efd5c1 FOREIGN KEY (relationship_id)
      REFERENCES relationship (relationship_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk91b3e3789e7fbcef FOREIGN KEY (creator_id)
      REFERENCES member (member_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk91b3e378f069914 FOREIGN KEY (professional_id)
      REFERENCES member (member_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT fk91b3e378ff77b92 FOREIGN KEY (project_price)
      REFERENCES review_project_price (price_id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
的外键。
在model中Review类是这样配置的
        @ManyToOne(cascade = CascadeType.DETACH)
@JoinColumn(name = "professional_id")
private Member professional;

可是在删除Member的时候报错
16:10:32,607  WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 23503
16:10:32,607 ERROR JDBCExceptionReporter:234 - 批次处理 0 delete from Member where member_id='40631' 被中止,呼叫 getNextException 以取得原因。
16:10:32,608  WARN JDBCExceptionReporter:233 - SQL Error: 0, SQLState: 23503
16:10:32,608 ERROR JDBCExceptionReporter:234 - 错误: 在 "member" 上的更新或删除操作违反了在 "review" 上的外键约束 "fk91b3e378f069914"
  详细:键值对(member_id)=(40631)仍然是从表"review"引用的.
java.sql.BatchUpdateException: 批次处理 0 delete from Member where member_id='40631' 被中止,呼叫 getNextException 以取得原因。
请问各位大牛 这是什么原因?
hibernate 级联删除 java --------------------编程问答-------------------- 你想删的表数据和别的表有主外键关系,自然删不掉。你把级联策略改成all试一下,cascade = CascadeType.DETACH。 --------------------编程问答-------------------- 主外键关系,需要设置cascade=”all-delete-orphan”或cascade=”all”。  --------------------编程问答-------------------- 这个就是你cascade配置问题啦 --------------------编程问答-------------------- cascade=all --------------------编程问答--------------------
引用 4 楼 wang_zhao 的回复:
cascade=all

我设置的就是all,可是还是不行啊!

引用 3 楼 zhulang205406 的回复:
这个就是你cascade配置问题啦

我设置的就是all,可是还是不行啊!
引用 2 楼 qiyuexuel 的回复:
主外键关系,需要设置cascade=”all-delete-orphan”或cascade=”all”。 

我设置的就是all,可是还是不行啊!
引用 1 楼 nongzhenqin 的回复:
你想删的表数据和别的表有主外键关系,自然删不掉。你把级联策略改成all试一下,cascade = CascadeType.DETACH。

我设置的就是all,可是还是不行啊! --------------------编程问答-------------------- 数据库设置外键的时候设置成cascade呢 --------------------编程问答-------------------- 你review表的这个外键约束fk91b3e378f069914实际上设置的是ON DELETE NO ACTION

见含义:

ON DELETE NO ACTION

    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,