问题标签 [fetching-strategy]

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 投票
1 回答
2750 浏览

nhibernate - NHibernate AliasToBeanResultTransformer 和集合

我想从我的数据层返回一个 DTO,它还包含子集合......例如:

到目前为止,这是一个基本查询,但我不确定如何将子集合从我的实体转换为 DTO。

这甚至可能吗,还是有另一种推荐的方法?

更新:只想添加一些关于我的场景的更多信息......我想将音频项目列表返回给当前登录的用户以及一些相关的实体,如标签、评论等......这些都相当简单使用多查询/未来。

但是,在向用户显示音频项目时,我还想向用户显示 3 个其他选项:

  • 天气他们已将此音频项目添加到他们的收藏夹列表中
  • 天气他们给这个音频“竖起大拇指”
  • 天气登录用户正在“关注”此音频的所有者

多对多 -> 用户帐户

希望这是有道理的...如果不是,我会尝试再次解释...我如何急切地为每个返回的音频实体加载这些额外的详细信息...我还需要 20 页中的所有这些信息。

我查看了批量获取,但这似乎为每个音频实体获取了所有的赞,而不是检查是否只有登录的用户赞了它。

很抱歉漫无边际:-)

保罗

0 投票
2 回答
69227 浏览

hibernate - Hibernate 中 LEFT JOIN 和 LEFT JOIN FETCH 的区别?

我试图了解 Hibernate 之间的LEFT JOIN区别LEFT JOIN FETCH

谁能解释一下?

谢谢

0 投票
1 回答
687 浏览

objective-c - 在 CoreData 中获取对象的最小日期

我和这个问题有同样的问题,但@davedelong 的答案对我不起作用。

遵循Apple 示例时,为了获取一组对象中的最小日期,我收到以下错误

我的理解是NSExpression's max: only support NSArrays. 所以我需要另一个解决方案。

@davedelong 建议使用升序NSSortDescriptor,所以我这样做了:

这里的问题是session从 fetch 返回的对象似乎不是具有最小startDate. 在我的测试中,它似乎甚至返回了最新的日期,但似乎并不一致。

我还可以获取每个GCSession对象并对其进行排序,但这似乎有点过头了,尤其是GCSession当用户使用应用程序时数量会增加。

编辑一个测试项目,演示 Apple 示例代码中的错误。

0 投票
2 回答
1035 浏览

jpa - 急切地收集包含其他急切地得到的集合的实体

我陷入了实体和字符串之间的 M:N 关系。一个用户可以拥有多个角色,并且每个角色可以分配给多个用户。角色只是一个字符串。角色包含在具有两列的表中:roleIdroleName

我创建了两个实体,但我绝对无法让它工作。第一个实体是用户:

第二个是与连接表关联的实体:

问题是,该roleName集合始终为空。我无法让它工作。当我在@CollectionTable注释中的表名出错时,它仍然有效。JPA 根本不获取子集合。它从与 table 连接的用户表中进行选择UsersToRoles,但userRoles缺少与表的连接。

我能做到吗?我可以急切地收集包含另一个急切获取的集合的实体吗?

0 投票
1 回答
172 浏览

architecture - 什么是获取策略?

我理解使用不同策略检索数据的核心概念。但我找不到一个好的总结/定义..

  • 它是一种设计模式吗?它是否适合更广泛的设计模式?
  • 它是特定于 ORM 实现的吗?(Hibernate 经常出现)
  • 它有什么作用?它是否(应该)返回值对象的集合,或者......你想要的任何东西?
  • 是否有与之相关的通用类和方法?
0 投票
2 回答
1077 浏览

hibernate - Hibernate 忽略单继承的 FetchType

我有 3 个实体继承自另一个实体。我正在使用 Single_Table 策略

例如,B、C 和 D 类继承自 A

在实体 B 上,我正在热切地加载另一个实体 X。不幸的是,Hibernate 忽略了我的注释并为每个实体 B 创建一个选择以获取实体 X。

我的选择语句如下所示:'select a from A a'

更多代码示例:

现在我希望 Hibernate 查询从 A 继承的所有类,它确实如此。不幸的是,它还为每个结果行执行一个 select 语句来查询“projekt”,这是我想避免的。

0 投票
2 回答
8650 浏览

java - 关于休眠中的获取策略以及 fetchtype 与 fetchmode 的关系的一些疑问?

我已经浏览了一些网络上的休眠获取策略链接。我喜欢的一个简短而简洁的链接是 http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/。我们有四种获取策略。这些都是 :-

  1. fetch-”join” = 禁用延迟加载,始终加载所有集合和实体。
  2. fetch-”select”(默认)=延迟加载所有集合和实体。
  3. batch-size=”N” = 最多获取“N”个集合或实体,不记录
  4. fetch-”subselect” = 将它的集合分组到一个 sub select 语句中。

我的第一个问题是上述哪一个符合 Eager 或lazyloading 获取类型的条件?

为了提出我对休眠获取策略的疑问,我正在考虑在我的 Department 类中使用下面的代码片段

根据我的理解,当我提到 fetchtype 为渴望时,我只剩下加入 fetch 策略,但是当我提到 fetchtype 作为延迟加载时,我还有其他三个选项,即 select、batch-size 和 subselect。同意?现在,如果我在我的一个遗留项目中查看代码片段,它提到 fetch type 为 eager 并且 fetch 策略为 select ,它们相互矛盾。对?

另一个查询是我在编写 FetchMode 时没有看到批量大小选项。尽管我看到其他三种获取策略,但在 Eclipse 中执行控制 + 空间?

0 投票
1 回答
151 浏览

iphone - iPhone:仅从服务器获取所需数据和图像一次的算法

我已经实现了一个包含 FanWall 的 iPhone 应用程序,允许用户在 FanWall 屏幕上发表评论,其他用户可以评论他们的评论或添加新评论。它工作正常,但非常慢,因为每次加载 FanWall 屏幕时,我都会获得前 25 条评论(我有一个加载更多按钮来加载接下来的 25 条评论..),包括来自服务器的图像、评论和其他属性作为 Zip 文件。iPhone App 然后解析这个 zip 文件的 plist 文件以在 Fanwall 屏幕中排列评论和图像。每次我都这样做,因为我需要下载任何新的评论和评论评论或对现有 plist 文件所做的任何更改!希望我在这里很清楚!任何人都可以请提出他们对最佳获取策略的想法。谢谢。

0 投票
2 回答
971 浏览

domain-driven-design - 实施 Udi 的获取策略 - 我如何搜索?

背景

Udi Dahan 建议将获取策略作为用于数据访问的有用模式。我同意。

这个概念是使角色明确。例如,我有一个聚合根 - 客户。我希望客户在我的应用程序的几个部分中 - 可供选择的客户列表,客户详细信息的视图,并且我想要一个按钮来停用客户。

似乎 Udi 会为这些角色中的每一个建议一个界面。所以我有ICustomerInList非常基本的细节,ICustomerDetail其中包括最近购买的 10 种产品,并且IDeactivateCustomer有一种方法可以停用客户。每个接口都暴露了我的客户聚合根,以便在每种情况下完成工作。我的客户聚合根实现了所有这些接口。

现在我想为每个角色实现一个获取策略。每种策略都可以将不同数量的数据加载到我的聚合根中,因为它将位于只公开所需信息位的接口后面。

实现这部分的一般方法是询问服务定位器或其他样式的依赖注入。例如,此代码将获取您想要的接口ICustomerInList,并找到一个获取策略来加载它(IStrategyForFetching<ICustomerInList>)。这个策略是由一个类实现的,该类知道只加载具有 ICustomerInList 接口所需的信息位的客户。

到目前为止,一切都很好。

问题

您传递给服务定位器或IStrategyForFetching<ICustomerInList>. 我看到的所有示例都仅通过已知 ID 选择一个对象。这种情况很简单,调用代码通过这个id,会得到具体的接口。

如果我想搜索怎么办?或者我想要客户列表的第 2 页?现在我想传递更多获取策略所需的术语。

可能的解决方案

我见过的一些示例使用谓词 - 如果特定聚合根应该是结果集的一部分,则返回 true 或 false 的表达式。这在条件下工作得很好,但是让前 n 个客户回来而不是更多呢?或者获取搜索结果的第 2 页?或者结果如何排序?

我的第一反应是开始向我的IStrategyForFetching<ICustomerInList>It now添加泛型参数IStrategyForFetching<TAggregateRoot, TStrategyForSelecting, TStrategyForOrdering>。这很快变得复杂而丑陋。不同的存储库使情况更加复杂。一些存储库仅在使用特定策略进行选择时提供数据,有些仅提供某些类型的排序。我希望能够灵活地实现可以采用排序功能的通用存储库以及仅返回以特定方式排序的聚合根的专用存储库。

听起来我应该应用开始时使用的相同模式 - 如何明确角色?我是否应该使用有效负载 Y(搜索/排序参数)实施获取 X(聚合根)的策略?

编辑 (2012-03-05)

如果我不是每次都返回聚合根,这一切仍然有效。如果每个接口由不同的 DTO 实现,我仍然可以使用 IStrategyForFetching。这就是这种模式强大的原因 - 获取和返回的内容不必以任何方式映射到聚合根。

我最终使用了IStrategyForFetching<TEntity, TSpecification>. TEntity 是我想要得到的东西,TSpecification 是我想要得到它的方式。

0 投票
1 回答
137 浏览

objective-c - 一般 CoreData 性能

关于以最有效的方式使用 coredata,我或多或少有一个普遍的问题。

我尝试了两种不同的方法来管理我的项目视图中显示的数据。

方法 1:当视图被加载时,我执行所有核心数据获取并将结果存储在一个数组中,然后视图从数组中检索显示的对象。(即:objectAtIndex:...)

方法 2:viewcontroller 本身让我的数据处理类在旅途中执行获取,只要需要特定的 coredata 对象,它就会被获取。

在我当前的项目中,这涉及大约 200-500 个对象,需要根据它们的属性在表格视图中进行排序和显示。

无论我首先加载所有对象还是批量加载它们(具有正确属性),获取方法都是相同的。

区别主要在于 cellForRow 方法,我必须决定是从数组中选择对象还是直接从 coredata 中选择对象。

两种方法都可以正常工作,我现在并没有真正看到任何性能差异,但我担心随着项目的扩展和更多数据的一种或另一种方式可能会变慢。

你认为更好的方法是什么?