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