我在想如何最好地實現一個屬性(這裏是LatestRequest
),它是隻讀的,並且由查詢支持。如何在休眠中映射由查詢支持的只讀屬性
在這裏,我有一個導出,它可以被要求多次發生。我想在Export上擁有一個屬性以獲取最新的ExportRequest
。目前,我有一個公式一個多到一的映射,這樣的:
<class name="Export" table="Exports">
<id name="Id">
<generator class="guid" />
</id>
<property name="Name" />
<bag name="Requests" cascade="all,delete-orphan" inverse="true" access="field.camelcase" order-by="CreationDate desc">
<key column="ExportId"/>
<one-to-many class="ExportRequest"/>
</bag>
<many-to-one name="LatestRequest"
class="ExportRequest"
formula="(select top 1 ExportRequests.Id from ExportRequests order by ExportRequests.CreationDate desc)"/>
</class>
<class name="ExportRequest" table="ExportRequests">
<id name="Id">
<generator class="native" />
</id>
<many-to-one name="Export"
class="Export"
column="ExportId"
not-null="true" />
<property name="CreationDate" />
<property name="Tag" />
</class>
然而,由於ExportRequests.Id
爲LatestRequest
被取出時,出口是牽強,該訪問模式返回陳舊數據:
var export = session.Get<Export>(exportId);
export.AddRequest(new ExportRequest(DateTime.Now, "Foo"));
Assert.AreEqual("Foo", export.LatestRequest.Tag); // fails due to stale data
session.Update(export);
那麼,實施LatestRequest
屬性的最佳方式是什麼?
我可以更改LatestRequest
的獲取方法,以便它執行一個Find
查詢,該查詢應該是最新的,但我不確定如何使導出知道該會話。