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语句。
展开
 我来答
norrain7211373
2010-09-15 · TA获得超过135个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:128万
展开全部
把transaction.commit();去掉
因为都在同一个seesion的作用范围内,所以最后会执行更新,发出一条语句。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
您我小0F
2010-09-18 · 超过12用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:31.6万
展开全部
可能是你搞了一个级联吧....把xuesheng.hbm.xml中set配置中的cascade="save-update" 去掉就OK了....
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式