2011-06-29 91 views
1

我有兩個實體,角色權限,每個都在數據庫中的表,並與HiLo算法正確設置ID生成。這工作正常。但是,數據庫中還有一個表,ROLE_PERMISSION_ASSIGNMENT,僅包含兩個前述表的外鍵,將實體綁定在一起。該表在我的應用程序中沒有實體對應物。NHibernate,HiLo和多對多的關聯

角色實體的映射是這樣的:

public class RoleMap : ClassMap<Role> 
{ 
    public RoleMap() 
    { 
     Table("\"ROLE\""); 
     LazyLoad();    
     Id(x => x.Id, "id").GeneratedBy.HiLo("hilo", "hilo_role", "50");   
     Map(x => x.Name).Column("name"); 
     HasManyToMany<Permission>(x => x.Permissions) 
      .Table("\"ROLE_PERMISSION_ASSIGNMENT\"") 
      .ParentKeyColumn("fk_id_role") 
      .ChildKeyColumn("fk_id_permission") 
      .Cascade.None(); 
    } 
} 

因爲我沒有爲ROLE_PERMISSION_ASSIGNMENT表中的實體,我不能指定應該生成的ID的方式,從而當在DB中保存角色(包含一些權限)時,它在創建ROLE_PERMISSION_ASSIGNMENT中的對應條目時失敗,因爲它沒有提供主鍵。

有沒有辦法告訴NHibernate生成ID爲ROLE_PERMISSION_ASSIGNMENT還與HiLo算法?

非常感謝。

+0

通常一個關聯表只有兩個字段也被用作組合PK。你能解釋爲什麼你需要另一種ID嗎? –

+0

謝謝sJhonny,你是對的,不需要在關聯表中有一個額外的ID,好點。 – twoflower

回答

0

您需要在關聯映射爲idbag,這是你想要(見http://www.nhforge.org/doc/nh/en/index.html#collections-idbag

我不認爲流利支持它到底是什麼;你必須混合使用XML映射。

+0

謝謝Diego!這確實完成了我打算做的事情。另一方面,在閱讀sJhonny的評論之後,我再次重新思考,並意識到我可能不需要這種表中的合成ID。不過,您的回答非常有幫助。 – twoflower