2012-09-17 42 views
0

我要加入一個表TransactionDeclaration(ID,...)用參數函數fp_Transaction_ACL(用戶ID),返回(TransactionDeclarationId,訪問權限ID)。連接必須是內部連接。NHibernate的:聯合映射與「反」和內部連接

我已經做了使用功能NHibernate以下映射:

public TransactionDeclarationMap() 
    { 
     this.Id(transactionDeclaration => transactionDeclaration.Id);     
     this.Join(
      "fp_TransactionDeclaration_ACL(:AclFilter.userId)", 
      join => 
      { 
       join.KeyColumn("TransactionDeclarationId"); 
       join.Map(transactionDeclaration => transactionDeclaration.AccessRight, "AccessRightType").CustomType 
        <AccessRight>().Generated.Always().ReadOnly(); 
       join.Inverse(); 
       join.Fetch.Join(); 
      }); 
    } 

由於函數不能被插入或更新,我已經添加了「join.Inverse()」按此處的說明:

Nhibernate/hibernate Avoid Insert in joined table or view

但當我添加此相反,聯接成爲一個左外連接這是不正常的我的使用情況。我需要一個內部聯接來過濾沒有被函數返回的表'TransactionDeclaration'的記錄。

我怎樣才能得到一個內部聯接?或者有沒有替代'逆'來避免插入函數?

回答

0

我不知道該怎麼做,在流利,但你必須指定的地方,在那裏你要加入的關鍵,不能爲空。

事情是這樣的,也許:

public TransactionDeclarationMap() 
{ 
    this.Id(transactionDeclaration => transactionDeclaration.Id);     
    this.Join(
     "fp_TransactionDeclaration_ACL(:AclFilter.userId)", 
     join => 
     { 
      join.KeyColumn("TransactionDeclarationId"); 
      join.Map(transactionDeclaration => transactionDeclaration.AccessRight, "AccessRightType").CustomType 
       <AccessRight>().Generated.Always().ReadOnly(); 
      join.Inverse(); 
      join.SetAttribute ("optional", false); 
      join.Fetch.Join(); 
     }); 
} 

click獲取更多信息。

+0

我已經試過 「join.Not.Optional();」但這並沒有改變任何東西。我仍然得到左外連接。 – Thierry