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