日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

我們?cè)谥付藬?shù)據(jù)庫(kù)表的關(guān)聯(lián)映射后,在刪除其中一方的的時(shí)候,提示了以下異常:deleted object would be re-saved by cascade (remove deleted object from associations): [entity.Associationinformation#7]

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


下面是我的多對(duì)一關(guān)聯(lián)情況:

1、實(shí)體類:

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; //一對(duì)一的社團(tuán)負(fù)責(zé)人 private?Associationrespeople?assoResID; //一對(duì)多的社團(tuán)活動(dòng) 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><!--?一對(duì)多的社團(tuán)與社團(tuán)活動(dòng)?--><set?name="assoActivity"?table="associationactivitylist"><key?column="assoID"></key><one-to-many?class="entity.Associationactivitylist"/></set><!--?一對(duì)一的社團(tuán)負(fù)責(zé)人?--><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><!--?配置多對(duì)一關(guān)聯(lián)關(guān)系?--> <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"?/>

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

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

請(qǐng)注意,這樣寫的話,就會(huì)報(bào)出以上異常,如果沒有關(guān)聯(lián)關(guān)系,這樣寫是可以的。結(jié)合了網(wǎng)上的方法,解決方法如下:

1、刪除Set方的cascade:(缺點(diǎn):子對(duì)象和父對(duì)象不能進(jìn)行級(jí)聯(lián)更新,沒意義)

2、解決關(guān)聯(lián)關(guān)系后,再刪除(個(gè)人推薦):

將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(); ... }

分別獲取到社團(tuán)和社團(tuán)活動(dòng)對(duì)象后,利用remove方法解除關(guān)聯(lián)管理,再將one方的值設(shè)為null。



轉(zhuǎn)載于:https://blog.51cto.com/cfdeng/1755553

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。