0

テーブル TransactionDeclaration(Id,...) を (TransactionDeclarationId,AccessRightId) を返すパラメトリック関数 fp_Transaction_ACL(userId) に結合する必要があります。結合は内部結合でなければなりません。

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 回避する 結合されたテーブルまたはビューへの挿入

しかし、この逆を追加すると、結合は左外部結合になり、私のユースケースには適していません。関数によって返されないテーブル 'TransactionDeclaration' のレコードをフィルター処理するには、内部結合が必要です。

内部結合を取得するにはどうすればよいですか? または、関数への挿入を避けるために「逆」に代わるものはありますか?

4

1 に答える 1

0

Fluent でそれを行う方法はわかりませんが、参加しているキーが null 可能でないことをどこかに指定する必要があります。

おそらく、次のようなものです。

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();
        });
 }

詳細については、クリックしてください。

于 2012-09-17T19:04:26.303 に答える