Criteria eager fetch-joined 集合以避免 n+1 选择

2024-05-27

假设 Item 和 Bid 是实体:一个 Item 有多个 Bid。它们被映射到休眠在典型的父子关系中:

<class name="Item" table="ITEM">
  ...
  <set name="bids" inverse="true">
    <key column="ITEM_ID"/>
    <one-to-many class="Bid"/>
  </set>
</class>

执行此查询后尝试访问每个项目的出价时,如何避免 n+1 选择?

List<Item> items = session.createCriteria(Item.class)
                        .createAlias("bids", "b").
                        .add(Restrictions.gt("b.amount", 100)).
                        .list();

Note我需要一个急于获取投标但对收集有进一步的限制(b.金额 > 100)

我尝试了以下方法但没有成功:

List<Item> items = session.createCriteria(Item.class)
                        .setFetchMode("bids", FetchMode.JOIN).
                        .createAlias("bids", "b").
                        .add(Restrictions.gt("b.amount", 100)).
                        .list();                        

List<Item> items = session.createCriteria(Item.class)
                        .createCriteria("bids")
                        .add(Restrictions.gt("amount", 100)).
                        .list();                        

这个标准查询似乎是正确的:

  List<Item> items = session.createCriteria(Item.class)
                    .setFetchMode("bids", FetchMode.JOIN)
                    .createAlias("bids", "b")
                    .add(Restrictions.gt("b.amount", 100))
                    .list();

FetchMode.JOIN是为了解决n+1问题。你定义过一些吗default_batch_fetch_size | batch-size映射或配置中的任何位置会产生反向影响?

如果没有,您可以尝试下面的 HQL 并看看这是否可以解决您的问题?

 Query query = 
      session.createQuery("from Item it left join it.bids b where b.amount=:bids");
 query.setParamter(bids, 100);
 List<Item> items = query.list();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Criteria eager fetch-joined 集合以避免 n+1 选择 的相关文章

随机推荐

  • Bash 和双引号传递给 argv

    我重新设计了这个示例以使其简单 但我想做的是在 bash shell 执行它时获取一个嵌套双引号字符串作为单个 argv 值 这是脚本示例 set x command1 key1 value1 key2 value2 key3 value3
  • 可以从操作系统内禁用/配置 Intel PT(处理器跟踪)吗?

    我有很多关于 Intel PT 的问题 一直在尝试解码手册 但非常困难 我的问题是 我试图找出 Intel PT 是否可以从操作系统内部禁用或重新配置 或者更一般地说 从它提供跟踪的系统内部禁用或重新配置 Intel PT 是否在写入特定寄
  • 如何更改 OS X 应用程序包中的可执行文件

    我想在 Firefox 启动之前和退出之后运行一个脚本 在 Ubuntu 中 我通过创建一个新的快捷方式来实现此目的 该快捷方式首先调用我的函数 然后调用 firefox 命令 然后调用我的最后一个函数 由于 firefox 命令会阻塞直到
  • 使用 JavaScript 解析时间

    这可能很简单 但我有点困惑如何做到这一点 我如何使用 JavaScript 仅解析以下内容中的时间ISO 8601 http en wikipedia org wiki ISO 8601日期字符串 2009 12 06T17 10 00 换
  • 为什么 MySQL 将 é 与 e 视为相同?

    我使用 Django Web 应用程序将 Unicode 字符串存储在 MySQL 数据库中 我可以很好地存储 Unicode 数据 但是在查询时 我发现 and e被视为好像它们是同一个角色 In 1 User objects filte
  • SQL Server 2008 R2 DMV - sys.dm_sql_referencing_entities - 查询用法

    我正在尝试使用以下命令获取表列表的所有依赖项sys dm sql referencing entities DMV 这个查询给了我所有表的列表 SELECT TableName from FinalTableList 此查询给出 Table
  • 如何使用reportlab添加单词的链接?

    我对链接和报告实验室感到困惑 我想要一个带有单词的文本 其中 包含 可点击的链接 例如 我写这样的文字 This web site is called StackOverflow 我想要这个词StackOverflow可点击并引导至相应页面
  • 如何计算 WPF 中的非客户端窗口大小?

    WPF 有SystemParameters class http msdn microsoft com en us library system windows systemparameters aspx公开了大量的系统指标 在我的计算机上
  • 在同一父视图上多次使用一个局部视图

    我正在使用 MVC3 剃须刀 我有一个场景 我必须在同一个父视图上多次使用部分视图 我遇到的问题是 当渲染父视图时 它会在这些部分视图中生成相同的输入控件名称和 ID 由于我的部分视图绑定到不同的模型 因此当视图在 保存 上发回时 它会崩溃
  • XNA - 在表单中嵌入 DirectX 控件?

    我想将 DirectX 好吧 XNA 的东西渲染到 system windows forms 控件而不是整个窗口 这样我就可以将它与按钮和东西配对 这可能吗 我会使用哪个控件 我该怎么做呢 我已经搜索了文档 但我不知道应该使用哪些术语 是的
  • 在 C++ 中检查空指针的首选方法是什么?

    选项A if NULL pSomethingColumn Yes we use Yoda conditions if NULL pSomethingColumn Or if pSomethingColumn if pSomethingCol
  • 使用谷歌图表API并通过ajax在线索提示中显示内容

    我有一个jsp页面 它使用google图表api以条形图的形式显示数据 Here https google developers appspot com chart interactive docs gallery columnchart是
  • SQL Server 存储过程对象名称无效

    我在尝试修改现有存储过程时收到此错误 Invalid object name dbo BackupDB 我能够创建此存储过程 但是当我单击修改选项来修改此存储过程时 系统显示了上述错误 您会看到所附图片 当尝试执行此命令时 我也遇到同样的错
  • TestNG 启动期间发生内部错误

    我创建了一个 TestNG 类 FirstTest java 当我将测试用例作为 TestNG Test 运行时 出现以下错误 期间发生内部错误 启动 FirstTest java lang NullPointerException Ecl
  • AbsoluteLayout - 测量标签高度而不将标签放置在 UI 上

    我在 AbsoluteLayout 中手动定位标签 为了正确地做到这一点 我想在将标签放置在用户界面上之前知道标签的高度 我找到了这个解决方案 但并非没有实际放置标签 public double MeasureLabelHeight str
  • 针对 dll/lib 的 cmake 链接

    我的 cmake 的输出是一个静态库 我正在这样创建它 add library myMainLib STATIC BACKEND SOURCES 当我尝试让 myMainLib 链接到第三方 lib dll 时 出现了问题 dll 文件将在
  • 如何根据 JComboBox 选择动态地将控件添加到表单?

    我正在尝试使用 Swing 创建一个简单的 java 表单 这个想法的基本思想是用户将在 JComboBox 中选择 0 到 5 然后 通过 ItemStateChanged 侦听器 将动态添加几个面板 每个面板包含 4 个控件 因此 如果
  • 在 MySQL 5.6 中重置 ROOT 密码

    我一直在关注这些说明 http dev mysql com doc refman 5 6 en resetting permissions html用于重置root本地安装的密码MySQL 5 6在 Windows 7 笔记本电脑上 我停止
  • 结构中未初始化字段没有 Clang 警告

    考虑以下结构 typedef struct foo int a int b foo 我的编译器不会对以下语句发出警告 foo m 300 为什么没有发出警告 我预计会收到警告 因为我没有为结构的最终字段提供任何值 这是我的编译器调用 cla
  • Criteria eager fetch-joined 集合以避免 n+1 选择

    假设 Item 和 Bid 是实体 一个 Item 有多个 Bid 它们被映射到休眠在典型的父子关系中