在Hibernate中如何以级联向方式同时向三张表中插入数据
我现在遇到了一个头痛的问题,我有三张表:actor、user、role.
actor表里有actorID,sername,password字段。
role表里有roleID,rolename字段。
user表里有userID,username,sex,address,mobil等字段。
三张表的关系是role对actor是一对多的关系,同时role对user也是一对多的关系。并且在actor.hbm.xml里分别设置role和user的inverse="true",cascade="save-update"结果是编译运行时显示两条sql语句,insert actor....。insert user.....。并没有显示插入role的sql语句,而且三张表里都没有数据插入。
如果我设置actor.hbm.xml的cascade="none"则只能在actor表里插入数据!郁闷!
向高手求救了!
问题点数:0、回复次数:13Top
1 楼007remember(绿原)回复于 2005-04-05 12:20:10 得分 0
路过
学习ing
帮您顶
Top
2 楼julian_zzx(竹十一)回复于 2005-04-05 13:48:33 得分 0
一个role多个user,为了存储合适的关系,要先save的是role;同理role和actor时save的也先是role。当然对many的也要save。
还有session.flush()也别忘了。Top
3 楼SInoyew(天行杨)回复于 2005-04-05 13:50:54 得分 0
学习!Top
4 楼talenty(残越)回复于 2005-04-05 13:54:36 得分 0
学习。。顶。。Top
5 楼vssivl(克斯)回复于 2005-04-11 18:00:24 得分 0
bang upTop
6 楼smallyi(编程菜鸟)回复于 2005-04-13 11:48:50 得分 0
在hibernate.properties 文件看看 hibernate.fetch_max_size 是多少,把它改为2试试Top
7 楼smallyi(编程菜鸟)回复于 2005-04-13 11:51:14 得分 0
记错了,应该是这个max_fetch_depthTop
8 楼whobillion(whobillion)回复于 2005-04-14 23:27:46 得分 0
同意 julian_zzx(竹十一)Top
9 楼smallyi(编程菜鸟)回复于 2005-04-19 15:01:13 得分 0
我上面说错了,不好意思!
我最近亲自试了一下,三张表级联插入是没有问题的;Hibernate的cascade设计是方便级联插入,删除,更新,如果象julian_zzx(竹十一)所说的那样就不用cascade这个设置了。
inverse和cascade是没有必然的联系的;
父类是要设置cascade="all|save-update"的,
外键一定要设置正确,也就是set中keyTop
10 楼sjg008(基本靠UP)回复于 2005-04-24 22:21:46 得分 0
学习Top
11 楼discolt(枫)回复于 2005-04-25 22:41:15 得分 0
每个类的cascade=all,有一对多的 inverse不要设为 true 就行了。Top
12 楼public_super_man()回复于 2005-04-25 22:52:13 得分 0
我写的一个,你看看吧
<set
name="roles"
table="user_role"
lazy="false"
inverse="false"
cascade="save-update"
sort="unsorted"
>
<key
column="username"
>
</key>
<many-to-many
class="com.haoe.model.Role"
column="role_name"
outer-join="auto"
/>
</set>Top
13 楼darkula(流浪街头的呆子)回复于 2005-04-26 09:04:36 得分 0
配置文件里设置:cascade=all
然后就是在SET属性时,将要SAVE的PO关联的属性填充好,再一个个SET进PO,最后SAVE这个PO时就能达到级联插入/更新的效果了
例如一个one-to-many关系的:
因为ONE关联MANY一方的属性是collection,所以在设置时,先填充MANY一方
manyPo.setName(xx);
manyPo.setAge(xx);
list.add(manyPo);
onePo.setAssMany(list);
dao.save(onePo);Top




