我正在开发一个与N Hibernate一起工作的项目。由于性能问题和项目复杂性的增加,我们需要在代码中手动进行关联。我们都知道,我们必须将lazy属性设置为true。我想知道的是,他们是否有任何方式与set lazy属性关联true.We已经创建了我们自己的方法来填充Association.But仍然为此我们还需要编写许多不满意的查询和代码。
请让我知道一些方法。 谢谢。
答案 0 :(得分:6)
默认情况下启用延迟加载。基本上有两种方法可以通过NHibernate实现延迟加载。
收藏既简单又直接。如果集合类仍然在NHibernate使用自己的实现,那么在那里实现延迟加载。
单端引用(“正常”关联)并不那么容易。延迟加载在代理中实现。代理是在运行时创建的类,它继承自引用的类。这就是为什么引用类中的所有内容都需要是虚拟的。代理会覆盖每个成员,并确保在从外部访问成员时加载数据。代理的问题是,如果引用基类,则从基类获取代理,并且不能将其向下转发到实际类。所以在使用延迟加载延迟类时要小心。
默认情况下,Lazy处于启用状态,您需要明确将其关闭。所以你不需要做任何特殊的事情来获得延迟加载。
在优化性能时,还要考虑使用批量提取。
单端关联:
<class name="xx" batch-size="10">
和集合:
<bag name="xx" .... batch-size="10">
它大大减少了N + 1问题(在这个例子中是10倍)。