1

次のマッピング ファイルを検討してください。TemporaryAccessOpenCommand と TemporaryAccessCloseCommand の両方が基本クラス Command から継承されます。

<class name="Command" table="xxx_Commands" lazy="false">
<id name="Id" type="Int32" unsaved-value="0">
  <generator class="identity"/>
</id>
<property name="BeginDate" />
<property name="EndDate" />
<component name="Result" class="CommandResult">
  <property name="Status" column="ResultStatus"/>
  <property name="Details" column="ResultDetails" />
</component>

<many-to-one name="Requestor" class="xxx.Domain.SessionInfo, xxx.Domain" column="SessionInfoId" lazy="false" />

<joined-subclass name="xxx.TemporaryAccess.Commands.TemporaryAccessCloseCommand, xxx.TemporaryAccess" table="xxx_Commands_TemporaryAccess_Close">
  <key column="CommandId"/>
</joined-subclass>

<joined-subclass name="xxx.TemporaryAccess.Commands.TemporaryAccessOpenCommand, xxx.TemporaryAccess" table="xxx_Commands_TemporaryAccess_Open">
  <key column="CommandId"/>
  <many-to-one name="EndUser" ...... />
  <property name="Reason"/>
  <property name="AccessRight"/>
  <property name="AccessType"/>
  <bag name="CloseAccessCommands" cascade="all" lazy="false">
    <key column="OpenCommandId"/>
    <one-to-many class="xxx.TemporaryAccess.Commands.TemporaryAccessCloseCommand, xxx.TemporaryAccess"/>
  </bag>
</joined-subclass>

CloseAccessCommand が成功していないすべての OpenAccessCommand を取得するための nhibernate クエリは何でしょうか?

私はこれを試しました:

    public IList<TemporaryAccessOpenCommand> FindOpenCommandsWithoutSucceededCloseCommand()
    {
        return this.HibernateTemplate.ExecuteFind<TemporaryAccessOpenCommand>(delegate(ISession session)
        {
            return session.CreateCriteria(typeof(TemporaryAccessOpenCommand))
                .CreateCriteria("CloseAccessCommands")
                .Add(Expression.Not(Expression.Eq("Result.Status", CommandStatus.Succeeded)))
                .List<TemporaryAccessOpenCommand>();
        });
    }

ただし、空のリストを返す必要があるときに、2 つの CloseCommand (失敗したものと成功したもの) を持つ OpenAccessCommand を返します。

あなたの助けに感謝します(そして私の下手な英語を許してください)

4

1 に答える 1