1

次のクラス マッピングの場合:

<class name="Person" table="Person" discriminator-value="null">
    <id name="ID" column="ID" >
        <generator class="identity"/>
    </id>
    <discriminator column="MasterId" />
    <property name="LongName" column="LONGNAME" />
    <property name="ShortName" column="SHORTNAME" />
    // other stuff here ...
    <subclass name="PersonHistory" discriminator-value="not null">
        <property name="MasterId" />
    </subclass>
</class>

私が実行すると:

        var query =
            from lac in session.Query<Person>()
            orderby lac.LongName
            select lac;
        return query.ToList();

MasterId が null に設定されているものと null ではないものの両方を使用して、Personテーブルからすべてのエントリを取得します。MasterId = null の NHibernate フェッチのみのエンティティを取得する方法はありますか?

4

2 に答える 2

1

私が望んでいたことを達成するために、基本クラス + 2 つのサブクラスを作成しました。これは構成です:

  • discriminator-valueを持つサブクラス:

    <subclass name="People" discriminator-value="null">
    </subclass>
    <subclass name="PeopleHistory" discriminator-value="not null">
        <property name="MasterRowId" />
    </subclass>
    
  • 基本クラスの識別子:

    <discriminator column="MasterRowId" />
    
于 2012-06-14T13:22:22.103 に答える
1

あなたの場合、弁別式を使用するのはどうですか?

<discriminator formula="case when MasterId is null then 0 else 1 end" />

次に、クラスの識別子属性値を設定します。

  • 個人の場合: discriminator-value="0"
  • PersonH​​istory の場合: discriminator-value="1"
于 2012-06-06T23:10:36.360 に答える