首页 新闻 搜索 专区 学院

NHibernate的hbm映射文件的id节不设置name属性的问题

0
悬赏园豆:10 [已关闭问题]

大家好!

在NH的说明文档中,说到:

If the name attribute is missing, it is assumed that the class has no identifier property.

但是如果没有name属性的话,只有加载可以,删除将不会执行。

有时我的数据库表为了删除快,就用了一个int类型的id字段,但我不想让这个id字段体现在对应的领域对象中,也就是说在我相应的领域对象中没有id属性,但这么一来,就没有办法用NHibernate的Delete来删除它,比如我有one-to-one的映射:

表有两个:User和PersonalField,主键分别为id和uId,后者的主键uId同时也是外键,参考User表的id字段。

User.hbm.xml:

PersonalField.hbm.xml:

我的User类有只读的Id属性,而PersonalField没有uID属性,也没有uID字段,User和PersonalField双向关联。

这样的话,加载没有问题,但删除和更新会出错。在删除User的时候(ISession.Delete(user)),NHibernate只会生成一句删除User表的sql语句(delete from [User] where ...),这样就会违反外键约束而报错(因为没有先删除PersonalField中的记录)。

如果我在PersonalField中加个uID字段,并在映射文件中设置access="field",就可以删除和更新,但问题是,PersonalField已经有一个User属性了,所以我不想再在PersonalField中写个没太大意义的uID属性(uID和User.Id是相等的)。所以想请教一下大家,有没有什么办法让我既不用在PersonalField中加上uID字段,又可以实现级联删除?

问题补充: 我的数据库表User的主键是id,PersonalField表的主键是uID,同时uID也是外键,参考User表
水言木的主页 水言木 | 菜鸟二级 | 园豆:386
提问于:2008-12-08 00:39
< >
分享
其他回答(1)
0

小弟不 才,  只知道  2005 中可以设置  级联删除    

不知可否帮上   

酒鬼 | 园豆:130 (初学一级) | 2008-12-08 08:53
0

one-to-one分为主建关联和唯一外键关联2种类型,你的映射文件用了主建关联,但表结构上却是唯一外键关联
你可以看一下NHibernate one-to-one

riccc | 园豆:250 (菜鸟二级) | 2008-12-08 13:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册