问题标签 [eager]

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.

0 投票
0 回答
679 浏览

java - JPA2:即使使用 JOIN 查询也有 N+1 选择

在我的应用程序中,我有一个实体 A 和一个实体 B 的列表,应该急切地获取:

为了得到 A 的列表,我首先做了这个简单的查询:

但是在那里我看到 Hibernate 在数据库上执行 N+1 选择查询,在 A 类上执行 1 个选择查询,在 B 类上执行 N(其中 N 是 DB 中 A 的元组数)。

令我惊讶的是,对于 Eager fetch,Hibernate 没有直接执行 LEFT JOIN 查询。

所以我首先尝试使用@Fetch(FetchMode.JOIN)Hibernate的注解,但是并没有按预期工作。

因此,我使用以下附加说明转换了我的列表查询:

好的,现在生成的 SQL 查询包含所有需要的 LEFT JOIN 以急切地构建完整的 A 对象......但它仍在 B 表上执行其他 N 个查询!我首先认为它来自@OrderBy我在 Bentries 参数上添加的注释,但即使删除,它仍然在进行 N+1 选择而不是 1...

知道为什么它会这样吗?...甚至为什么默认情况下它不对实体中急切地获取的集合进行 LEFT JOIN ?

0 投票
1 回答
620 浏览

c# - NHibernate - 嵌套急切加载被忽略

我正在尝试急切地加载具有嵌套集合的实体。如下:

父 -> 子 1 -> 孙子 -> GreatGrandChildren

这是我的 4 次尝试之一(这是最有希望的):

这会生成预期的 SQL,其中包含许多左外连接。由于加入,还返回了大约 800 个相同的父母。

但是,当我通过 for 循环中的代码访问第一个父级的列表时,数据库被无数次命中,完全忽略了前面的查询。

有任何想法吗?

信息:NHibernate 3.3;数据库:甲骨文;VS2012 - ASP.NET

谢谢

0 投票
1 回答
4882 浏览

hibernate - Hibernate 默认 Lob 懒惰/渴望

当 hibernate 加载一个包含带有 @Lob 注释的字段的对象时,该字段是急切加载还是延迟加载?

0 投票
0 回答
447 浏览

dependency-injection - 如何强制嵌入式 Grizzly Web 应用程序上下文启动

我使用嵌入式 Grizzly Web 服务器来托管带有 Jersey 的 RESTful Web 服务。这一切正常。

我的问题是当我启动服务器而不是等待第一个传入的客户端请求时,如何强制 Web 应用程序上下文急切地初始化。这是一个小问题,但我想解决一个。

我像这样启动嵌入式服务器:

“TestBinder”配置了我需要的依赖注入,该类如下所示:

最后,“CatalogManager”是一个单例,用于预加载和缓存我的应用程序通过 RESTful Web 服务公开的所有静态数据。

“CatalogManager”的本质是这样的:

所以问题是依赖注入和@PostConstruct 方法在服务器启动时不会运行,而是等到第一个应用程序请求并且我的应用程序的第一个用户得到很长的延迟。

0 投票
1 回答
1903 浏览

hibernate - 为什么 Hibernate Eager Fetch 不起作用?

我试图编写一个简单的测试程序来模拟我项目中的两个对象并遇到麻烦。基本上我有两个简单的对象,Parent 和 Child 有一对多的关系。以下是两个对象:

当我运行程序时,我收到以下错误:

如果我将earger fetch 更改为lazy fetch,它可以正常工作。如果我使用@Fetch(value=FetchMode.SELECT),它也可以正常工作。我的问题是:为什么 Eager fetch 不起作用?

0 投票
0 回答
74 浏览

c# - EF Eager Loading 不适用于多个集合和小数

我遇到了实体框架和急切加载的问题:如果我想加载几个包含小数的集合,只有前两个包含提供正确的数据。第三个包含提供不带逗号分隔符的数字:这是我的模型:

这是急切的加载请求:

这是我认为的结果

数据库中 Auto 的价格是 23,14 而 Taxi 的价格是 79,87 这不是视图的问题,使用调试器我也可以在篮子对象中看到该问题。

如果我将我的包含更改为 ArticlesA、ArticlesC、ArticlesB,则 B 的值是错误的。

作为一个快速的解决方法,我重新加载了行评论中的第三个集合:

但是这个解决方案生成了第二个数据库调用或每个集合一个调用,我将来需要更多或更复杂的实体结构

0 投票
1 回答
395 浏览

loading - JVM 在哪些情况下决定对类进行 Eager 加载?

延迟加载和急切加载有什么区别。在什么情况下会发生延迟加载和急切加载。

0 投票
3 回答
16273 浏览

entity-framework - 实体框架 - 渴望加载两个多对多关系

抱歉这么长,但至少我认为我获得了所有信息以便能够理解并可能有所帮助?

我想使用预先加载从我的数据库中加载数据。

数据设置在五个表中,设置了两个级别的 m:n 关系。所以有三个包含数据的表(以从上到下的层次结构排序):

前两个实际上只包含他们自己的 ID(将与此处无关的其他数据挂钩)。

在这三个数据表之间是两个 m:n 表,带有排序提示:

这本质上是 OpenStreetMap 数据结构的一部分。我让 Entity Framework 从这个数据库中构建它的对象,它设置的类与表的完全一样。m:n 表确实作为类存在。(我知道在 EF 中你可以构建你的对象 m:n 关系而不需要明确的中间类——我应该尝试以这种方式更改对象模型吗?)




我想做的事:我的切入点正是关系中的一项。

我认为最好先急切加载中间的 m:n 关系,然后在循环中迭代它并急切加载最低的关系。我尝试通过以下方式做到这一点

只需一次访问数据库即可加载关系及其所有​​ 1:n 信息 - 好的,很好。但我注意到它只加载 1:n 表,而不是中间数据表“方式”。

如果我像这样修改该行,这不会改变:

所以我不能在这里加载中间级别,似乎?

我根本无法工作的是急切地加载节点级别的数据。我尝试了以下方法:

这确实有效,并且在每次迭代的一个语句中急切地加载中间层方式和 way_node 的所有 1:n 信息,但不是来自节点的信息(纬度/经度)。如果我访问其中一个值,我将触发另一次访问数据库以加载单个节点对象。

最后一次旅行是致命的,因为我想加载 1 个关系 -> 300 种方式,每种方式 -> 2000 个节点。所以最后我击中了服务器 1 + 300 + 300*2000... 我认为还有改进的余地。

但是怎么做?我无法以有效的语法和急切的加载方式编写最后一条语句。不感兴趣; 有没有一种方法可以一次加载整个对象图,从一个关系开始?

0 投票
1 回答
503 浏览

java - 在分离之前使用 JPA 完全加载实体?

我需要对实体进行一些处理。我希望它在交易之外。问题是这个实体包含一些延迟加载的字段,因此我的程序无法访问其中的一些字段,因为会话没有处于活动状态。

最自然的做法是在加载后完全初始化此类实体,但仍处于事务范围内(在分离之前)。但我找不到如何做到这一点。难道真的没有简单的方法来做这样一件小事吗?我想留在 JPA 规范后面。

由于某种原因,在 jpql 中获取所有属性不起作用。

0 投票
0 回答
687 浏览

c# - 实体框架:热切加载 TPT 的子类类型的属性

我使用每种类型的表我有这样的东西

当我检索 E 类型的对象时,我想对 C 类的属性 D 执行预先加载。像这样的东西

在这种情况下是否可以进行预加载?

更新

@Marty 说这是不可能的。在我看来,我只能使用延迟加载,对吗?但是我想强制加载对象,因为我要在 DbContext 被释放后使用对象。那么我该怎么做呢?目前我使用 for 循环访问每个元素以进行延迟加载。