问题标签 [batch-fetching]
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.
hibernate - 急切加载使用批量获取
是否可以强制 Hibernate 实现的 JPA 使用批量获取进行预加载?
您可能想知道我为什么要做这么奇怪的事情,所以让我解释一下。
我们有两个实体A
和B
. A
从to有一个多对一的关系B
。
我想通过A
搜索加载实体,并且希望在它们从存储库返回之前完全加载它们。
但是由于 's 很多而A
's 很少B
,所有(相关的)B
's 都将在二级缓存中。因此,我想避免B
每次都从数据库中获取所有 's。
jpa - eclipselink 嵌套批量获取
我建立了一个非常简单的模型,其中包含 3 个实体:
Department
其中有多个(关系employees
)Employee
其中有多个(relaionshipaddresses
)Address
我想批量获取Employee
和Address
从获取中获取Department
,所以我有以下 JPL:
我添加了以下提示:
但是我经常收到以下错误:
如果我直接在关系上使用@BatchFetch
注释@OneToMany
,那么查询就完美了。
我怎样才能在不使用注释的情况下解决这个问题(因为注释会强制对我的所有查询进行批量查询)?
如果您需要更多信息或完整代码,我很乐意提供。
caching - eclipselink 和 coherence 缓存预热:孩子没有被初始化
我将 eclipselink 与 Coherence 分布式缓存和关系数据库(Toplink Grid - Grid cache configuration)一起使用。现在,我正在尝试尽可能高效地执行缓存预热,以减少未来与数据库的连接数量。
我有一个非常简单的数据模型:与子实体(MagicCard)具有单向一对多关系的父实体(Person)
为了执行缓存预热,我正在使用批量获取进行查询。这样,我避免了 N+1 数据库选择的执行。
在运行时转换为:
此搜索似乎正确地填充了两个实体的 Coherence 缓存。以下日志来自一个有 4 个人的示例(分别有 4、3、1 和 0 张卡片):
接下来,我尝试(使用 EntityManager)查找特定的人或特定的卡片
并且如预期的那样成功执行了缓存搜索:
然而,当我试图找到一个人的卡片时,eclipselink 需要执行一个额外的数据库选择(我想我会通过批处理来避免这些(?)):
我期待它从一致性缓存中获取卡片列表,而不是从数据库中获取卡片列表,因为我之前已经用每个人的卡片填充了前者。我可以让它按我的意愿工作的唯一方法是将@OneToMany FetchType 更改为EAGER,但我想避免这种更改,因为它会对我系统的另一部分产生负面影响。
批处理和加载提示不是应该初始化父对象中的子对象吗?还是我做错了什么?有没有其他/更好的方法来实现这一目标?
提前致谢
java - hibernate.jdbc.fetch_size 和批量获取策略@BatchSize 的区别
对于 Hibernate 中的 N+1 查询问题,我添加@BatchSize(size=20)
了集合和类级别。它运行得非常好,因为它每次获取 20 条记录。现在我发现有一个hibernate.jdbc.fetch_size
配置选项,我认为它与@BatchSize
注释相同。但是,当我在项目中配置它时,它对 N+1 查询问题没有影响。
我错了hibernate.jdbc.fetch_size
吗?是hibernate.jdbc.fetch_size
为了什么?
java - Hibernate 中的 NamedNativeQuery 生成许多选择语句?如何批量获取引用的实体?
我以为我了解hibernate的获取策略,但似乎我错了。
所以,我有一个 namedNativeQuery:
然后我称之为:
该查询返回数千个实体......好吧,好的,但在查询之后休眠查询数千个其他查询:
好的,这是逻辑,因为 @OneToOne 关系被急切地获取。我不想偷懒,所以我想要一个批量获取策略。
我试图注释 Article 属性,但它不起作用:
那么我该怎么做才能批量获取关系呢?
eclipselink - eclipselink 批量获取 IN 不适用于多租户
我正在使用 @Multitenant(SINGLE_TABLE) 来支持多租户。为了解决 n+1 问题,我使用了 eclipselink 的批量获取功能。
当我使用以下查询时:
sql和结果日志:
所有这些都完美无缺。但是当我启用多租户时:
当我使用以下查询时:
String boql = "SELECT e FROM TestEntity e order by e.id"; query.setFirstResult(1); // 用于分页 query.setMaxResults(3); // 用于分页
sql和结果日志:
为什么 TESTMULTITENANTENTITYLINE 连接到自身 t0/t1?这会产生许多重复的记录
我尝试获取记录 2、3、4,为什么它会获取 1、5、6?
能否请你帮忙?这是一个错误吗?还是我错过了什么?提前致谢。
ios - 接收带有查询和键范围的项目
这是简单的结构:
我的问题是如何只获取具有类别的项目: id7-id11 项目之间的运动?/autoid 键由 firebase 管理
swift - 使用异步显示套件 / cloudkit 批量获取
我正在尝试实现批量获取以与 cloudkit 和异步显示工具包集成。但是,当我尝试滚动时,出现此错误:
[NSOperationQueue addOperation:]:操作已完成,无法入队'
有什么想法会发生吗?谢谢!
这些是我的网络电话:
在我的 TableViewController 中:
angularjs - 在 Groovy 中编组有效负载非常慢
我目前正在开发一个 Angular/Groovy 应用程序,并且通过在后端(groovy)中编组有效负载而导致性能非常缓慢。它需要很长时间才能完成,将其发送到前端并渲染。
在后端我有:
marshalSteps 看起来像这样:
因为我们为每个请求发送不同的封送处理,所以 marshalMinimalStep 看起来像:
在前端,我使用 ng-repeat 来显示所有步骤。
我有大约 9.000 个步骤,需要大约 150,000 毫秒来执行该 getAll() 方法并在前端渲染这些步骤,这太慢了。
我可以做些什么来提高性能?
我是否必须在 Hibernate 中批量获取,例如 sessionFactory.currentSession.clear()?
我也将 marshalTranslation() 作为问题的一部分。
jpa - @BatchFetch 类型 JOIN
对于属于另一个实体类型的实体字段,我对此注释感到困惑:
在 EclipseLink for BatchFetch 的文档中,他们解释如下:
例如,考虑具有 EMPLOYEE 和 PHONE 表的对象,其中 PHONE 具有指向 EMPLOYEE 的外键。默认情况下,读取员工地址列表默认需要 n 次查询,针对每个员工的地址。通过批量提取,您可以对所有地址使用一个查询。
但我对指定的含义感到困惑BatchFetchType.JOIN
。我的意思是,BatchFetch 在检索与员工关联的记录列表时不会加入吗?地址/电话类型的记录是使用外键检索的,所以它本身就是一个连接,对吧?
BatchFetch 类型是一个可选参数,对于 join 来说:
JOIN – 原始查询的选择条件与批处理查询连接
这是什么意思?批量查询不是连接本身吗?