报错如下:deleted object would be re-saved by cascade (remove deleted object from associations): [com.eps.bean.TbNewsclass#10]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.eps.bean.TbNewsclass#10] 表结构如下,A表的列a是B表的外键,要删除一个A实体,必须删除所有和这个实体有关的B表内容。具体代码如下:List list = tbnewsService.list("from TbNews where newcalssid="+tbnewsclassForm.getTbnewsclass().getNewcalssid());
System.out.println("-=-=-=-=-=-=-=-=-=-=-="+list.size());
for (int i = 0; i < list.size(); i++) {
TbNews t = (TbNews)list.get(i);
tbnewsService.delete(t);
}TbNewsclass tbNewsclass = tbnewsclassService.find(TbNewsclass.class, tbnewsclassForm.getTbnewsclass().getNewcalssid());
tbnewsclassService.delete(tbNewsclass);数据库结果如下:A表的内容没有删除,但是B表的相关内容只剩下一条,但是最后一条删除不了。
以上问题出现的另一种形式的错误:nested exception is org.hibernate.exception.SQLGrammarException: could not delete:
System.out.println("-=-=-=-=-=-=-=-=-=-=-="+list.size());
for (int i = 0; i < list.size(); i++) {
TbNews t = (TbNews)list.get(i);
tbnewsService.delete(t);
}TbNewsclass tbNewsclass = tbnewsclassService.find(TbNewsclass.class, tbnewsclassForm.getTbnewsclass().getNewcalssid());
tbnewsclassService.delete(tbNewsclass);数据库结果如下:A表的内容没有删除,但是B表的相关内容只剩下一条,但是最后一条删除不了。
以上问题出现的另一种形式的错误:nested exception is org.hibernate.exception.SQLGrammarException: could not delete:
看看这个
nested exception is org.hibernate.exception.SQLGrammarException: could not delete无论我关联数据有几百条,结果都是删的剩下一条数据,然后不让删了!!!!
<class name="com.eps.bean.TbNewsclass" table="tb_newsclass">
<id name="newcalssid" type="java.lang.Integer">
<column name="newcalssid" />
<generator class="native" />
</id>
<property name="newclassname" type="java.lang.String">
<column name="newclassname" length="50" />
</property>
<bag name="tbNewses" inverse="true" cascade="delete">
<key>
<column name="newcalssid" />
</key>
<one-to-many class="com.eps.bean.TbNews" />
</bag>
</class>
</hibernate-mapping>删除相关代码:
List list = tbnewsService.list("from TbNews where newcalssid="+tbnewsclassForm.getTbnewsclass().getNewcalssid());
// for (int i = 0; i < list.size(); i++) {
// TbNews t = (TbNews)list.get(i);
// tbnewsService.delete(t);
// }
TbNewsclass tbNewsclass = tbnewsclassService.find(TbNewsclass.class, tbnewsclassForm.getTbnewsclass().getNewcalssid());
tbnewsclassService.delete(tbNewsclass);