问题标签 [lazy-loading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flex - 延迟加载何时会成为 RIA 中的问题?
所以我有一个使用 Spring MVC + Hibernate 的简单 Web 应用程序,并且正在使用 OpenSessionInViewFilter。我最近一直在考虑用 Flex 或 GWT 之类的东西替换 UI。
起初我认为这很容易,因为我可以从新的前端访问我的服务层。但是当我更多地考虑这一点时,我对延迟加载的问题有点紧张。使用传统的 Web 前端没问题,因为我在视图中使用了开放会话......视图需要加载的所有内容都会在视图构建时加载。
所以假设我有一个方法来返回一个客户,一个客户有一堆联系人,联系人有一堆地址,等等。如果我从我的新“RIA”控制器调用 getCustomer(),它将获得一个客户,但客户的联系人集合只是一个代理或 null。
我可以在已有的基础上创建一个新层,返回预先填充的 DTO……但是……这似乎会变得复杂。
有什么建议吗?
hibernate - 如何通过 hql 延迟加载一对一的组合
如果实体 A 与实体 B 具有双向一对一或零对一映射。
映射如下:
和
当我为 EntityA 执行 hql 查询(或者更确切地说是命名的 hql 查询)时,hibernate 会急切地使用单独的 select 语句加载 EntityA#propertyB。
我的问题是,如果我的 hql 返回 1000 个 EntityA(都有各自的 EntityB),hibernate 将执行 n+1 个查询(第一个查询是 EntityA 返回 1000 个结果,而 n 个查询将来自 EntityA# propertyB 选择延迟加载)。
但是,我不需要那些 EntityA#propertyB,这就是为什么我想延迟加载它们(不让休眠使用单独的 sql 查询)。
那可能吗?如果是,我该怎么做?
谢谢,弗兰兹
java - Java JDBC 延迟加载的结果集
有没有办法让你通过运行 JDBC 查询获得的 ResultSet 被延迟加载?我希望在我请求时而不是事先加载每一行。
.net - 找到正确的模式来加载具有不同图形的对象
我试图找出处理加载具有不同图形(相关实体)的对象的最佳方法,具体取决于它们所使用的上下文。
例如这是我的域对象的示例:
我想了解的是如何根据我的使用方式以不同的方式加载这些信息。
例如,在首页我有一个所有谜题的列表。在这一点上,我并不真正关心谜题的解决方案或这些解决方案中的步骤(可能会变得非常庞大)。我想要的只是谜题。我会像这样从我的控制器加载它们:
稍后对于拼图视图,我现在只关心当前用户的解决方案。我不想用所有解决方案和所有步骤加载整个图表。
在我的 IPuzzleService 中,我的方法如下所示:
延迟加载在现实世界中实际上并不奏效,因为我的会话是在每个工作单元之后立即处理的。我的控制器没有存储库的任何概念,因此不管理会话状态,并且在呈现视图之前无法保持它。
我试图找出在这里使用的正确模式是什么。我的服务是否有不同的重载,比如和GetPuzzleWithSolutionsAndVotes
更多视图特定的?GetPuzzlesForDisplayView
GetPuzzlesForListView
我说得有道理吗?我离基地很远吗?请帮忙。
c# - NHibernate 会话管理和延迟加载
我有一段时间试图找出我在 NHibernate 中的会话管理问题。我假设我的很多麻烦是由于缺乏对 IoC 和 AOP 概念的了解;至少我是这么想的,法比奥·毛洛一直在指导我。
无论如何,我的问题是我有一个 win 表单应用程序,它正在进行“get”调用并将结果绑定到网格。绑定后,用户可能会执行某种“写入”操作,这些操作会导致会话在写入后关闭,以尝试使用会话每次使用的概念。然后用户可以滚动浏览导致延迟加载启动的网格,现在会话已经关闭,我得到一个异常。
我不想让我的视图认识到我的会话,我不想在用户关闭表单时发送 KillAllSessions。此外,用户可能在任何给定时间打开多个表单,这进一步加剧了与该方法相关的问题。我基本上希望所有这些都在“幕后”工作。
所以到目前为止我的想法是拦截延迟加载调用并检查会话是否打开,如果没有重新打开它,获取信息然后重新关闭它。但是,据我所知,这并不多,这基本上就是延迟加载的工作原理。它被代理工厂 (NHibernate.Bytecode.Castle) 拦截,然后使用会话检索数据。所以我需要实际拦截该调用,然后在重新打开会话后将其传递给最初的预期拦截。这就是我的想法。
我的问题基本上首先是这甚至是正确的方法吗?其次,如果是我什至不知道从哪里开始。我从来没有做过任何方法调用的拦截,我在理论上知道但在实践中不知道。我知道有一些图书馆可以做这种事情,比如 Rhino Commons,但我想借此机会学习并成为一名更好的程序员。我正在尝试理解 AOP 和上下文绑定对象,但目前我并没有理解它。你们中的一些人可以帮助一个人吗?
nhibernate - 当实体上存在惰性属性时,NHibernate 的 criteria.List() 挂起
我遇到了一些非常奇怪的行为,NHibernate 查询开始挂起。我制作了一个演示项目,以可重复的方式展示了这种行为。
你可以在这里下载项目
这是有问题的代码:
关键行是作者字段上的 .SetFetchMode。在我的演示项目的第一次加载时,它加载良好。当我点击刷新时,它挂起并且永远不会超过 crit.List() 调用。通过急切的加载,它每次都能正常工作。
我正在使用 Castle.Facilities.NHibernateIntegration.Components.SessionWebModule 来确保每个请求 1 个会话。
我发现的另一件奇怪的事情是这只发生在 SQL Server 上。当我使用 SQLite 时,一切正常。在我的演示项目中,我有一个简单的构建标志,可让您轻松切换数据库。只需查看 /build 目录中的 local.properties.xml。
我知道在这种特殊情况下急切加载解决了我的问题,但在我的应用程序中,我不想急切加载所有内容。
请下载解决方案并自己尝试。我在其他机器上试过,他们做同样的事情。
以下是一些 SQL Profiler 捕获。您可以看到 Posts 的查询已发送到服务器,但它停在那里:
第一个请求(按预期运行):
好的请求 http://muc-central.com/misc/good_request.jpg
第二个请求(挂起):
c# - 持久化延迟加载的属性
我正在使用一个简单的存储库模式并拥有带有 LazyList 的对象,例如:
这对于获取物品非常有用,但我想知道通常如何保存物品?
为了坚持促销,我只需要保存 TargetSites 列表,前提是它们首先被加载。这是延迟加载项目的常见模式吗?我可以找到很多关于延迟加载的信息,但很少能找到对延迟加载对象的结果修改。
.net - 我可以告诉 VS2008 忽略我延迟加载的属性的调试时评估吗?
在我们的 .Net 应用程序中,我们的一些业务对象使用延迟加载来访问来自服务器的数据。在调试时,如果我想检查一个属性,我必须非常小心,而不是“查看”或访问这些属性,因为这会导致 IDE 尝试评估这些属性,但会失败。是否有一个属性我可以放在这些属性上,这样它们仍然会显示在 Intellisense 中,但在调试期间检查对象时不会被评估?
java - 会话关闭后,如何使用休眠访问延迟加载的字段?
考虑这种情况:
- 我已经通过休眠加载了一个父实体
- Parent 包含一个很大且延迟加载的 Children 集合
- 在用户查看父数据时,在此初始加载后关闭休眠会话
- 用户可以选择查看lazy Children集合的内容
- 我现在希望加载该集合
加载此集合的方式/最佳方式是什么?
- 假设 session-in-view 不是一个选项,因为只有在用户查看了 Parent 并决定查看 Children 之后才会获取 Children 集合。
- 这是一项服务,可通过基于 Web 和桌面的客户端远程访问。
谢谢。
entity-framework - 实体框架:延迟加载“解决方案”的问题(不询问如何进行延迟加载)
所以基本上我想出了一个半自制的延迟加载解决方案,基本上让生成的属性是私有的,并且有一个公共属性来处理是否加载生成的属性:
现在,这适用于类中的查询(因为我在生成的类的部分类扩展中拥有所有“查询”),例如:
由于此方法位于 Item 类中,因此它可以在无法执行的情况下正常运行:
由于实体框架无法弄清楚该代理属性是什么来生成表达式。这确实成为一个问题,假设我正在尝试计算一个房间的所有帖子(项目),并且我希望在 Room 类上使用该方法。
出于同样的原因,在 Item 类中,我不能在 Item 类中使用 ParentRoom(代理)属性,我不能在此查询中对 Room 类使用它。实体框架只是无法弄清楚该属性。
现在的问题是,是否有某种属性我可以标记 ParentRoom 属性,以便它知道它是指 ParentRoomInner 属性,因此可以知道在分解表达式时如何处理它?
我能想到的唯一其他选择是让生成的属性是内部的,让 Room 类查询使用 ParentRoomInner 属性(meh)或将 GetPostCount 方法等方法移动到 Item 类,并且只在 Room 类点上使用 GetPostCount 方法给它。(也不可怕,只是加倍了一种方法)