当前位置: 首页 > 面试题库 >

休眠获取策略-何时使用“ join”和何时使用“ select”?

史昊焱
2023-03-14
问题内容

大多数Hibernate关联都支持“提取”参数:

fetch="join|select"

默认值为“选择”。

如何决定将哪个用于哪个关联?

我尝试将应用程序范围从“选择”全部更改为“连接”-生成的查询数量可能减少了10倍,但性能却保持不变(甚至变得稍差一点)。

谢谢。


问题答案:

Join应该可以解决n +
1问题。如果您有10个父母,每个父母有10个孩子,则join将需要一个查询,而select则需要11个查询(一个对于父母,每个父母的孩子)。如果数据库与应用程序位于同一服务器上,或者网络速度非常快,那么这可能没什么大不了的,但是如果每个数据库调用中都存在延迟,则可以累加。对于初始查询,join方法的效率稍差一些,因为您要复制每一行中的父列,但是您只能往返数据库一次。

通常,如果我知道我需要所有父母的孩子,我会加入。如果我只需要几个父母的孩子,则可以使用select。



 类似资料:
  • 问题内容: 我感觉好像总是被教导要使用s,并且我经常看到它们与s 混合使用,以在应该在不同页面上执行相同操作的几段代码中完成相同类型的查询。开始: 那就是我正在从事的工作: 我看到很多像: 似乎LEFT也可能是INNER,有没有抓住的机会? 问题答案: 有收获吗?是的-左联接是外联接的一种形式,而内联接是内联接的一种形式。 这是显示差异的示例。我们将从基本数据开始: 在这里,我们将看到内部联接和左

  • 问题内容: 我该如何决定使用哪个? , , , 。 我阅读了https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.html,但没有足够详细地解释。 问题答案: 在Hibernate文档确实在他们定义了很好的工作: 19.2.2。策略:只读 如果您的应用程序需要读取而不是修改持久类

  • 问题内容: 我有几个SQL查询,我只是想在数据库上触发。我在整个应用程序中都使用hibernate方式,因此我更喜欢使用hibernate方式来调用此sql查询。 在下面的示例中,我想获取count +名称,但是当我使用createSQLQuery()时无法弄清楚如何获取该信息。 我已经看到了一些解决方法,人们只需 要从结果中 得出一个“ count( )”,但是在这种情况下,我使用count(

  • 问题内容: 我有一个包含11列的表,但是我需要在我的应用程序中仅获得2列,我使用的是spring / hibernate / DAO组合。现在,我有一个包含所有11个字段的域类,以及一个映射表中所有11列的映射文件。如何使用仅获得其中的2个? 问题答案: 要么: 使用投影-专业:无添加-缺点:不是类型安全的(结果是一行的行,每行都是: 在SELECT子句中使用构造函数表达式(不需要将指定的类作为实

  • 问题内容: 我有下面的表格 如何通过下面的AND组合成一个IN语句来使用Restriction.in查询? 问题答案: 我认为这是您要使用的条件组合(顺便说一句,帮助Hibernate实体bean定义而不是表结构更容易):

  • 问题内容: 我正在使用hibernate和hql在Java代码中进行查询。但是我有这样一个例外: 我不明白“ 0”的含义。以下是一些带有示例的细节: 我有几个表加入hql。表格如下: 类: hql: 查询: 结果是对象“ A”的列表,其中包含收集的长度和单位。我不明白为什么会遇到这个例外。请给一些建议。 更新: 我编写了一个ResultTransformer并输出所有“别名”以查看问题: 似乎它还