hibernate 多对多,查询时set集合时没有数据,提交事物时发送一条delete语句,把中间表数据全删了,是怎么
往set中添加数据时没问题,可以插到中间表,就是查询的时候,set长度为0,并且提交事物时会发送一条sql,delete掉所有中间表中关于这个学生id的所有课程。这是为什...
往set中添加数据时没问题,可以插到中间表,就是查询的时候,set长度为0,并且提交事物时会发送一条sql,delete掉所有中间表中关于这个学生id的所有课程。这是为什么呢?
有学生和课程俩表,xuesheng.hbm.xml中set配置:
<set name="kechengs" table="xuesheng_kecheng" inverse="false" cascade="save-update" schema="dbo" catalog="SSH">
<key>
<column name="xuesheng_id" not-null="true" />
</key>
<many-to-many column="kecheng_id" class="po.Kecheng" />
</set>
kecheng.hbm.xml 中set配置:
<set name="xueshengs" table="xuesheng_kecheng" inverse="false" schema="dbo" catalog="SSH">
<key>
<column name="kecheng_id" not-null="true" />
</key>
<many-to-many column="xuesheng_id" class="po.Xuesheng" />
</set>
测试代码:
Xuesheng xuesheng = (Xuesheng) session.get(Xuesheng.class, new Integer(1));
Set kechengSet= xuesheng.getKechengs();
System.out.println("Set==="+kechengSet.size());???set为什么长度为0;
transaction.commit(); //提交时会把学生ID为1的中间表数据都删掉,很奇怪。???
希望热心人士帮忙看看是什么原因,辛苦了。
norrain7211373你好,如果session上还想save新课程(或其他非查询操作)就不能把commit删掉,这时还是会把原有数据删掉怎么办呢?还是有点没明白,为什么最后会执行更新,发送一条delete语句。 展开
有学生和课程俩表,xuesheng.hbm.xml中set配置:
<set name="kechengs" table="xuesheng_kecheng" inverse="false" cascade="save-update" schema="dbo" catalog="SSH">
<key>
<column name="xuesheng_id" not-null="true" />
</key>
<many-to-many column="kecheng_id" class="po.Kecheng" />
</set>
kecheng.hbm.xml 中set配置:
<set name="xueshengs" table="xuesheng_kecheng" inverse="false" schema="dbo" catalog="SSH">
<key>
<column name="kecheng_id" not-null="true" />
</key>
<many-to-many column="xuesheng_id" class="po.Xuesheng" />
</set>
测试代码:
Xuesheng xuesheng = (Xuesheng) session.get(Xuesheng.class, new Integer(1));
Set kechengSet= xuesheng.getKechengs();
System.out.println("Set==="+kechengSet.size());???set为什么长度为0;
transaction.commit(); //提交时会把学生ID为1的中间表数据都删掉,很奇怪。???
希望热心人士帮忙看看是什么原因,辛苦了。
norrain7211373你好,如果session上还想save新课程(或其他非查询操作)就不能把commit删掉,这时还是会把原有数据删掉怎么办呢?还是有点没明白,为什么最后会执行更新,发送一条delete语句。 展开
展开全部
把transaction.commit();去掉
因为都在同一个seesion的作用范围内,所以最后会执行更新,发出一条语句。。
因为都在同一个seesion的作用范围内,所以最后会执行更新,发出一条语句。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询