hibernate 级联删除,求教 呀,急。。

现有学生-班级表,想删除某个班级,且级联删除班级里的学生。学生的xml:<classname="com.gpms.po.Xuesheng"table="xuesheng"... 现有学生-班级表,想删除某个班级,且级联删除班级里的学生。

学生的xml:

<class name="com.gpms.po.Xuesheng" table="xuesheng" schema="dbo" catalog="GPMS" lazy="false">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="banji" class="com.gpms.po.Banji" fetch="select" cascade="all">
<column name="b_id" />
</many-to-one>
<property name="name" type="string">
<column name="name" not-null="true" />
</property>
<property name="flag" type="string">
<column name="flag" not-null="true" />
</property>
</class>

班级的xml:

<class name="com.gpms.po.Banji" table="banji" schema="dbo" catalog="GPMS" lazy="false">
<id name="id" type="integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" not-null="true" />
</property>
<set name="xueshengs" inverse="true" cascade="all">
<key>
<column name="b_id" />
</key>
<one-to-many class="com.gpms.po.Xuesheng" />
</set>
</class>

在测试类中:

public void jiliangdel(int id)
{
Session session=HibernateSessionFactory.getSession();

Transaction transaction=session.beginTransaction();
String hql="delete Banji b where b.id=?)";

Query query=session.createQuery(hql);

query.setInteger(0,id);

query.executeUpdate();
transaction.commit();

session.close();
}

在main中调用:jiliangdel(1),删除编号为1的班级。

这些级联我都设置了,不什么为什么,还是会报键冲突。

注:我数据库中只设计 了关系,没有设计级联,我也在网上看了,说只要hibernate设置级联了就可以级联操作。大神们帮忙 看看。
展开
 我来答
漿糊的江湖
2012-02-11 · TA获得超过163个赞
知道小有建树答主
回答量:108
采纳率:0%
帮助的人:92.5万
展开全部
是因为你吧班级.xml中的 <set name="xueshengs" inverse="true" cascade="all"> 中的反转控制inverse=“true”设置为true的原因吧。就是说你把控制权交给班级了,应该把控制权放到many的学生那边。
理论上查询可以用级联,但是删除不建议级联(即:one-to-many关系中cascade一般都用“save-update”)。删除一般建议两表自己删自己的。级联删容易一下全删了,~~~汗~~~
追问
不对吧,inverse=“true”的意思就是交出控制权,默认为false才是自己控制
追答
就是说可能你应该把inverse=“true”放到“学生.hbm.xml”文件中的时候,你删除班级的时候,才会把学生一起删除。
但是如果你这么做的话,你通过查询学生的时候可能无法级联查询到班级。所以还是建议你保持现状,删表的话一个一个删
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
jianghu521530
2012-02-11
知道答主
回答量:16
采纳率:0%
帮助的人:8.3万
展开全部
在映射文件中有个属性,你可看一下!!
更多追问追答
追问
能说清楚点么?
追答
1.级联是指两个对象之间的操作联动关系,对一个对象执行了操作之后,对其指定的级联对象也需要执行相同的操作; 
2.级联配置通过many-to-one的cascade属性实现;
3.cascade属性有四种取值:
all:所有操作都执行级联操作;
none:所有操作都不执行级联操作;
save-update:保存和更新时执行级联操作;
delete:删除时执行级联操作;
4.通过级联操作可以解决持久化对象不能直接引用瞬时对象的问题。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式