JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 用hibernate实现实体间的多对多的问题
asdmonster





發文: 20
積分: 0
於 2004-10-08 15:09 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
源帖是发布在http://forum.javaeye.com/viewtopic.php?t=7979上的,但是没有人理睬。Sad
不知道tw有没有专业的hibernate的论坛,所以帖到这里了,如果这里再没有人理睬,我估计就要到www.hibernate.org了,但是我的英语......汗
原帖如下:
-------------------------------------------
用hibernate实现实体间的多对多的问题

两个存在多对多关系的实体,很典型的,比如权限管理的权限和权限组,一般的设计(数据库设计)是这样的,两个表role,rolegroup,和一个中间表role2rolegroup.role表有roleId(PK),roleGroup有roleGroupId(PK),role2roleGroup的字段有若干字段:roleId(FK),rolegroupId(FK),role2rolegroupId(PK),还有字段一二三(至少实际业务中是存在这样的需求的)。
现在我做这么一个动作:新增一个权限,权限组,然后给二者建立关系(也就是新增的权限属于新增的权限组啦)。
(我喜欢以级联的方式做,如果先insert两个主表,然后insert中间表,可以做到,但是我就没有必要在这里提出问题请大家 帮忙看看了。)
我尝试的第一个方案:role--rolegroup n:n
我的映射文件和网上随处可见的many-to-many的映射文件一模一样,关键性的属性值:inverse=true,outer-joint=auto,cascade=svae-update.
我的程序的代码是
1
2
3
4
5
6
7
......
role1.getRoleGroups().add(rolegroup1);
rolegroup1.getRoles().add(role1);
......
session.save(role1);
session.save(rolegroup1);
......

但是程序运行结束以后我发现两个主表(role,rolegroup)里面的确是有了纪录,但是role2rolegroup里面空空如许 Sad 。(是我的哪里做错了)
这种情况下我想了一下,对中间表觉得疑惑: 这个表的PK怎么生成,其他的字段怎么添入,也许在这种场景下用many-to-many不合适。(实实在在,我不知道怎么样像对象一样操作这个中间表)
我尝试的第二个方案:索性都换成one-to-many,于是多了一个role2rolegroup.hbm.xml文件,映射文件的关键字段是 inverse=true,cascade=all
我的程序的代码是
1
2
3
4
5
......
role1.getRole2Rolegroups().add(role2rolegroups1);
......
session.save(role1);
......

这时候出现异常了:
object references an unsaved transient instance - save the transient instance before flushing: net.test.role.RoleGroup

我猜想hibernate是这样的处理次序,role,role2rg,rolegroup,在操作role2rg的时候新增的rolegroup当然是transient......
不知道我上面哪里错了,分析得对不对,该怎么解决这个问题,请大家 指点。


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
3874 用hibernate实现实体间的多对多的问题 asdmonster 2520 2004-10-08 15:09
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8