Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NHibernate查询问题_C#_Java_.net_Nhibernate_Hibernate - Fatal编程技术网

C# NHibernate查询问题

C# NHibernate查询问题,c#,java,.net,nhibernate,hibernate,C#,Java,.net,Nhibernate,Hibernate,这些是我的实体(简化): 但是,当使用此查询以及搜索当前状态为Received的标识请求时,我也会得到当前状态为Finished的请求,因为该请求之前已接收到该状态。所以我需要和Max(CreatedOn)做点什么 NHibernate映射: <class name="IdentificationRequest" table="IdentificationRequest"> <id name="Id" column="IdentificationRequestI

这些是我的实体(简化):

但是,当使用此查询以及搜索当前状态为Received的标识请求时,我也会得到当前状态为Finished的请求,因为该请求之前已接收到该状态。所以我需要和Max(CreatedOn)做点什么

NHibernate映射:

   <class name="IdentificationRequest" table="IdentificationRequest">

    <id name="Id" column="IdentificationRequestId" unsaved-value="-1">
      <generator class="identity"/>
    </id>

    <bag name="stateHistoryItems" access="field" order-by="CreatedOn desc" fetch="join" cascade="all-delete-orphan" lazy="false">
      <key column="IdentificationRequestId"/>
      <one-to-many class="IdentificationRequestStateHistoryItem"/>
    </bag>

  </class>


    <class name="IdentificationRequestStateHistoryItem" table="IdentificationRequestStateHistoryItem">

      <id name="Id" column="IdentificationRequestStateHistoryItemId" unsaved-value="-1">
        <generator class="identity"/>
      </id>

      <many-to-one name="identificationRequest" access="field" lazy="false" cascade="none" column="IdentificationRequestId" class="IdentificationRequest"></many-to-one>

      <many-to-one name="State" lazy="false" fetch="join" cascade="none" column="IdentificationRequestStateId" class="IdentificationRequestState"></many-to-one>

      <component name="Timestamp" class="EntityTimestamp">
        <property name="CreatedOn"/>
        <component name="CreatedBy" class="User">
          <property name="Name" column="CreatedBy" />
        </component>
        <property name="ChangedOn"/>
        <component name="ChangedBy" class="User">
          <property name="Name" column="ChangedBy" />
        </component>
      </component>

    </class>


  <class name="IdentificationRequestState" table="IdentificationRequestState">

    <id name="Id" column="IdentificationRequestStateId" unsaved-value="-1">
      <generator class="assigned"/>
    </id>

    <property name="Name"/>

  </class>    

拥有IdentificationRequest.CurrentState属性可以省去很多麻烦

你对max()的想法是正确的。您可以添加另一个子标准,在其中获取该请求的所有RequestState的最大(日期),然后向现有子标准添加限制,使其日期=该最大日期。恶心,但这是我唯一能想到的办法

private ICollection<IdentificationRequest> GetByCurrentState(IdentificationRequestState state)
{
    var session = GetCurrentSession();

    var subCriteria = DetachedCriteria.For(typeof(IdentificationRequestStateHistoryItem))            
        .SetProjection(Projections.Property("identificationRequest.Id" ));

    subCriteria.Add(Restrictions.Eq("State", state));

    var criteria = session
        .CreateCriteria(typeof (IdentificationRequest))
        .Add(Subqueries.PropertyIn("Id", subCriteria))
        .SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer());

   return criteria.List<IdentificationRequest>();          
}
   <class name="IdentificationRequest" table="IdentificationRequest">

    <id name="Id" column="IdentificationRequestId" unsaved-value="-1">
      <generator class="identity"/>
    </id>

    <bag name="stateHistoryItems" access="field" order-by="CreatedOn desc" fetch="join" cascade="all-delete-orphan" lazy="false">
      <key column="IdentificationRequestId"/>
      <one-to-many class="IdentificationRequestStateHistoryItem"/>
    </bag>

  </class>


    <class name="IdentificationRequestStateHistoryItem" table="IdentificationRequestStateHistoryItem">

      <id name="Id" column="IdentificationRequestStateHistoryItemId" unsaved-value="-1">
        <generator class="identity"/>
      </id>

      <many-to-one name="identificationRequest" access="field" lazy="false" cascade="none" column="IdentificationRequestId" class="IdentificationRequest"></many-to-one>

      <many-to-one name="State" lazy="false" fetch="join" cascade="none" column="IdentificationRequestStateId" class="IdentificationRequestState"></many-to-one>

      <component name="Timestamp" class="EntityTimestamp">
        <property name="CreatedOn"/>
        <component name="CreatedBy" class="User">
          <property name="Name" column="CreatedBy" />
        </component>
        <property name="ChangedOn"/>
        <component name="ChangedBy" class="User">
          <property name="Name" column="ChangedBy" />
        </component>
      </component>

    </class>


  <class name="IdentificationRequestState" table="IdentificationRequestState">

    <id name="Id" column="IdentificationRequestStateId" unsaved-value="-1">
      <generator class="assigned"/>
    </id>

    <property name="Name"/>

  </class>