首页 新闻 搜索 专区 学院

使用nhibernate向关系表中插入数据

0
悬赏园豆:50 [已解决问题] 解决于 2010-12-21 16:55

两张表加一张关系表

表的图见http://www.cnblogs.com/xyjblog/archive/2010/05/29/1747152.html(不好意思,第一次用,不会插入图片)

想想UserGroup中插入数据,用HQL怎么写

(因为本人的UserGroup表中的两个字段均为主键,所以用链接里的那位兄弟的方法会提示违反了主键原则,不知道怎么解决,所以想试试看用HQL可不可以插入)

问题补充: 生成的实体类中只有User和Group,没有UserGroup的实体类
Vis的主页 Vis | 初学一级 | 园豆:150
提问于:2010-12-17 11:06
< >
分享
最佳答案
0

HQL,只能查,不能插。一般是做了关系mapping就可以了。如 usergroup.Users.add(User), session.saveOrupdate(usergroup) 这样就可以了,当然cascade要设定为SaveOrUpdate或者All。不过我更喜欢是User.Group=usergroup这种映射,减少sql。

收获园豆:50
沉默的糕点 | 小虾三级 |园豆:1786 | 2010-12-17 11:46
那为什么会发生违反了主键原则
Vis | 园豆:150 (初学一级) | 2010-12-17 14:53
不明白主键原则是什么?能不能把异常贴出来看看。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-17 18:02
{"违反了 PRIMARY KEY 约束 'PK_UserRole'。不能在对象 'dbo.SystemUserRole' 中插入重复键。\r\n语句已终止。"} could not insert collection: [Entities.SystemUser.SystemRoles#13][SQL: INSERT INTO [dbo].[SystemUserRole] ([UserId], [RoleId]) VALUES (@p0, @p1)] 这张表中的两个字段均为主键(不好意思啊,这两天因为工作比较杂,所以做着做着,就忘记了,抱歉,抱歉)
Vis | 园豆:150 (初学一级) | 2010-12-21 14:48
应该是联合主键吧。User和Role是不是双向关联呢?
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-21 15:52
是的
Vis | 园豆:150 (初学一级) | 2010-12-21 15:58
而且两个字段的增加了约束check existing data on creation or re-enabling:yes
Vis | 园豆:150 (初学一级) | 2010-12-21 16:03
两个字段均增加了约束 check existing data on creation or re-enabling:yes
Vis | 园豆:150 (初学一级) | 2010-12-21 16:04
我估计你是试着把 User.Roles或Role.Users其中一个的Mapping 改为Cascade=“none”,这样应该可以避免重复插入。应该是Mapping Cascade和Inverts方向有问题。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-21 16:12
解决了,太谢谢你了
Vis | 园豆:150 (初学一级) | 2010-12-21 16:55
另外可不可以在问个问题,如何在网站中查看Nihabernate生成的sql语句
Vis | 园豆:150 (初学一级) | 2010-12-21 18:13
只能启动log4net,然后写文件。
沉默的糕点 | 园豆:1786 (小虾三级) | 2010-12-22 09:36
好的,谢谢
Vis | 园豆:150 (初学一级) | 2010-12-22 10:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册