hibernate级联删除,我总是出错

zizhu114 2008-10-03 03:44:31
bigtype.hbm.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.appfuse.model.Bigtype" table="tb_bigtype">
<id name="ID" column="ID" type="int">
<generator class="identity"/>
</id>
<property name="TypeName" column="TypeName"/>
<set name="smalltype" lazy="true" cascade="all">
<key column="bigId"/>
<one-to-many class="org.appfuse.model.Smalltype"/>
</set>
</class>
</hibernate-mapping>
smalltype.hbm.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="org.appfuse.model.Smalltype" table="tb_smalltype">
<id name="ID" column="ID" type="int">
<generator class="identity"/>
</id>
<property name="smalltypename" column="smalltypename"/>
<many-to-one name="bigtype" column="bigId" class="org.appfuse.model.Bigtype" cascade="none" lazy="false"/>
</class>
</hibernate-mapping>
我的删除函数是
public Bigtype getBigtype(int id)
{
Bigtype bigtype=(Bigtype)getHibernateTemplate().get(Bigtype.class,new Integer(id));
return bigtype;
}
public void removesmalltype(int id)
{
Bigtype bigtype=getBigtype(id);
removesmalltype1(bigtype);
getHibernateTemplate().delete(bigtype);
}
private void removesmalltype1(Bigtype bigtype)
{
List list=getHibernateTemplate().find("select s from Smalltype s where s.bigtype.ID="+bigtype.getID());
for(int i=0; i<list.size(); i++)
{
Smalltype smalltype=(Smalltype)list.get(i);
getHibernateTemplate().delete(smalltype);
}
}
removesmalltype(id)想从这个类,先获取大类对象,再删除小类对象。可实际小类根本删不掉,removesmalltype(id)中的id是大类别号。请大家帮我看看
...全文
244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a409693932 2008-10-06
  • 打赏
  • 举报
回复
多的一方inverse="true"
MnziIT 2008-10-05
  • 打赏
  • 举报
回复
同意一楼而楼的观点,级联删除的时候要写上inverse 说的通俗点,就是说inverse有谁来维护(反向的) 你写在这边应该是对应的类的来维护
Landor2004 2008-10-05
  • 打赏
  • 举报
回复
看了一下代码,没什么问题,断点调试一下吧,看看是否进入了for循环
scorpionqxq 2008-10-04
  • 打赏
  • 举报
回复
好像多对多时,建议 inverse=“true”
oo1987416 2008-10-03
  • 打赏
  • 举报
回复
inverse="true",
的意思是 表示又对方(One的多方)管理双方的关联关系,
为false时表示自己来管理双方的关联关系
accp206 2008-10-03
  • 打赏
  • 举报
回复
仔细看了一遍,暂时没有发现别的问题。

楼主,请把 bigtype.hbm.xml
的这一句配置 <set name="smalltype" lazy="true" cascade="all"> 加上 inverse="true",变成:
<set name="smalltype" lazy="true" cascade="all" inverse="true" >

应该可以解决问题。

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧