nhibernate中的一對一關係可以延遲加載「false」或「proxy」。我想知道是否有人知道如何做一個懶惰的一對一映射。NHibernate:如何在一對一映射中啓用延遲加載
我通過使用映射到私有字段的惰性集合來獲得相同的結果,並讓公有屬性返回該集合的第一個結果。它的作品,但不是最乾淨的代碼...
在此先感謝!
nhibernate中的一對一關係可以延遲加載「false」或「proxy」。我想知道是否有人知道如何做一個懶惰的一對一映射。NHibernate:如何在一對一映射中啓用延遲加載
我通過使用映射到私有字段的惰性集合來獲得相同的結果,並讓公有屬性返回該集合的第一個結果。它的作品,但不是最乾淨的代碼...
在此先感謝!
除非關聯是強制性的,否則不支持一對一的延遲加載。推理請參見here。
歸結爲,爲了確定關係的另一方是否存在(N),Hibernate必須去數據庫。由於您已經將數據庫命中,因此您可以加載完整的對象。
雖然有些情況下只需點擊數據庫來查看相關對象是否存在,但實際上並沒有加載該對象是有意義的(如果相關對象非常「沉重」),它目前在NHibernate中不受支持。
據我所知,沒有一種非hacky的方式來延遲加載一對一。我希望我錯了,但最後一次檢查是這樣。
2015年的任何進展都是關於這個問題的? – 2015-05-03 10:53:01
由於[2010年1月](https://ayende.com/blog/4378/nhibernate-new-feature-no-proxy-associations),支持lazy =「no-proxy」`,但由於方式可以在非「約束」方面進行延遲加載(見NH4)。 (延遲加載在'受約束'方面被支持了很長時間,但很多人錯過了這一點。請參閱[答案](/ a/389345/1178314)。) – 2016-03-21 23:42:42
有想法。它的詳細描述爲here:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateTest" namespace="NHibernateTest">
<class name="Person" >
<id name="PersonID" type="Int32">
<generator class="identity" />
</id>
<property name="LastName" type="String" length="50" />
<property name="FirstName" type="String" length="50" />
<many-to-one name="Photo" class="PersonPhoto" />
</class>
<class name="PersonPhoto">
<id name="PersonID" type="Int32">
<generator class="foreign">
<param name="property">Owner</param>
</generator>
</id>
<property name="Photo" type="BinaryBlob" />
<one-to-one name="Owner" class="Person" constrained="true" />
</class>
</hibernate-mapping>
我試過了上面Artem Tikhomirov使用的例子。我不斷收到照片列不存在的錯誤。在看了this之後,我發現映射稍微有點偏離。當我改變了很多一對一的映射到指定的列名這樣的:
多到一個名稱=「照片」欄=「是PersonID」級=「PersonPhoto」唯一=「真」
我得到它的工作。我希望這可以幫助某人:o)
除非協會是強制性的,否則你是什麼意思? – cbp 2012-03-28 07:46:56