日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們在指定了數據庫表的關聯映射后,在刪除其中一方的的時候,提示了以下異常:deleted object would be re-saved by cascade (remove deleted object from associations): [entity.Associationinformation#7]

(注:entity.Associationinformation是實體類,7為設定的外鍵的值)


下面是我的多對一關聯情況:

1、實體類:

entity.Associationinformation和entity.Associationactivitylist,前者為one,后者為many。

Associationinformation.java:

public?class?Associationinformation?implements?java.io.Serializable?{ private?Integer?assoId; private?String?assoName; private?String?assoPosition; private?Integer?assoPersonNum; private?String?assoBuildDate; private?String?assoIntroduce; private?String?assoServiceObject; //一對一的社團負責人 private?Associationrespeople?assoResID; //一對多的社團活動 private?Set<Associationactivitylist>?assoActivity; //省略get/set方法 }

Associationactivitylist.java:

public?class?Associationactivitylist?implements?java.io.Serializable?{ private?Integer?activityId; private?String?activityName; private?String?activityPosition; private?Integer?activityPersonNum; private?String?activityTime; private?String?activityContent; private?Associationinformation?association; //省略get/set方法 }

2、映射文件:*.hbm.xml

Associationinformation.hbm.xml:

<hibernate-mapping><class?name="entity.Associationinformation"?table="associationinformation"?catalog="stu_association"><id?name="assoId"?type="java.lang.Integer"><column?name="AssoID"?/><generator?class="increment"?/></id><property?name="assoName"?type="java.lang.String"><column?name="AssoName"?length="20"?/></property><property?name="assoPosition"?type="java.lang.String"><column?name="AssoPosition"?length="20"?/></property><property?name="assoPersonNum"?type="java.lang.Integer"><column?name="AssoPersonNum"?/></property><property?name="assoBuildDate"?type="java.lang.String"><column?name="AssoBuildDate"?length="10"?/></property><!--??<property?name="assoResName"?type="java.lang.String"><column?name="AssoResName"?length="20"?/></property>--><property?name="assoIntroduce"?type="java.lang.String"><column?name="AssoIntroduce"?length="150"?/></property><property?name="assoServiceObject"?type="java.lang.String"><column?name="AssoServiceObject"?length="20"?/></property><!--?一對多的社團與社團活動?--><set?name="assoActivity"?table="associationactivitylist"><key?column="assoID"></key><one-to-many?class="entity.Associationactivitylist"/></set><!--?一對一的社團負責人?--><many-to-one?name="assoResID"class="entity.Associationrespeople"column="assoResID"lazy="false"cascade="all"unique="true"></many-to-one></class> </hibernate-mapping>

Associationactivitylist.hbm.xml:

<hibernate-mapping><class?name="entity.Associationactivitylist"?table="associationactivitylist"?catalog="stu_association"><id?name="activityId"?type="java.lang.Integer"><column?name="ActivityID"?/><generator?class="increment"?/></id><property?name="activityName"?type="java.lang.String"><column?name="ActivityName"?length="20"?not-null="true"?/></property><property?name="activityPosition"?type="java.lang.String"><column?name="ActivityPosition"?length="20"?not-null="true"?/></property><property?name="activityPersonNum"?type="java.lang.Integer"><column?name="ActivityPersonNum"?/></property><property?name="activityTime"?type="java.lang.String"><column?name="ActivityTime"?length="10"?not-null="true"?/></property><property?name="activityContent"?type="java.lang.String"><column?name="ActivityContent"?length="150"?/></property><!--?配置多對一關聯關系?--> <many-to-one?name="association"?class="entity.Associationinformation"?column="assoID"?cascade="all"> </many-to-one></class> </hibernate-mapping>

記得在Hibernate.cfg.xml中聲明映射文件的路徑:

<mapping?resource="entity/Associationinformation.hbm.xml"?/> <mapping?resource="entity/Associationactivitylist.hbm.xml"?/>

到這里就完成了一對多的關聯配置,然后在Action中寫Delete()方法:

public?String?deleteActivity(){ ... Transaction?tx?=?HibernateSessionFactory.getSession().beginTransaction(); assoActivityDao.delete(associationactivitylist); tx.commit(); HibernateSessionFactory.closeSession(); ... }

請注意,這樣寫的話,就會報出以上異常,如果沒有關聯關系,這樣寫是可以的。結合了網上的方法,解決方法如下:

1、刪除Set方的cascade:(缺點:子對象和父對象不能進行級聯更新,沒意義)

2、解決關聯關系后,再刪除(個人推薦):

將Action中的方法改為:

public?String?deleteActivity(){ ... Associationactivitylist?associationactivitylist?=?assoActivityDao.findById(AssoID); Associationinformation?Association?=?associationactivitylist.getAssociation(); Association.getAssoActivity().remove(associationactivitylist); associationactivitylist.setAssociation(null); Transaction?tx?=?HibernateSessionFactory.getSession().beginTransaction(); assoActivityDao.delete(associationactivitylist); tx.commit(); HibernateSessionFactory.closeSession(); ... }

分別獲取到社團和社團活動對象后,利用remove方法解除關聯管理,再將one方的值設為null。



轉載于:https://blog.51cto.com/cfdeng/1755553

總結

以上是生活随笔為你收集整理的(J2EE学习笔记)解决Hibernate删除异常:deleted object would be re-saved by cascade的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。