我必须加入一个表TransactionDeclaration(Id,...)参数函数fp_Transaction_ACL(userId)返回(TransactionDeclarationId,AccessRightId)。联接必须是内联接。
我使用Fluent 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‘的记录,而不是函数返回的记录。
怎样才能获得一个内部连接?或者有没有一种替代‘逆向’的方法来避免在函数中插入?
发布于 2012-09-18 03:04:26
我不知道如何在Fluent中做到这一点,但你必须在某个地方指定你要加入的键是不可空的。
可能是这样的:
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。
https://stackoverflow.com/questions/12465536
复制相似问题