当前位置: 首页 > 知识库问答 >
问题:

hibernate不执行快速获取(使用fetch=“join”和lazy=“false”)

马权
2023-03-14
<many-to-one name="user" class="com.xyz.beans.User" lazy="false" fetch="join">
    <column name="startedBy" />
</many-to-one>
<many-to-one name="participantByParticipant1" class="com.xyz.beans.Participant" lazy="false" fetch="join" cascade="all" >
    <column name="participant1" />
</many-to-one>
<many-to-one name="participantByParticipant2" class="com.xyz.beans.Participant" lazy="false" fetch="join" cascade="all">
    <column name="participant2" />
</many-to-one>
Query query = session.createQuery("from Post as p order by challenge.createdOn desc");
query.setFirstResult(0);
query.setMaxResults(10);

共有1个答案

齐意致
2023-03-14

在映射中设置lazy=“false”fetch=“join”只有在直接获得实体时才会产生效果:

session.get(Post.class, postId);

当您执行查询时,您需要显式地声明您的fetch策略。否则它还是会偷懒:

from Post as p left join fetch p.user

像往常一样,这个规则有许多变体和例外。您可以在Hibernate文档16.3中找到更多。协会和加入。

 类似资料:
  • 1. 前言 本节和大家一起聊聊 Hibernate 中的 Lazy 和 Fetch 的区别,及两者适合的开发场景。通过本节课程的学习,你将了解到: 什么是延迟加载; 延迟加载的意义。 2. 又见 get() 和 load() Session 对象提供了 2 个方法用来查询 : get() 方法; load()方法。 如果仅以结果为导向,则无法分辨两者的差异性。 两者如同双胞胎,外观虽然差异不大,但

  • 问题内容: 请帮助我了解在哪里使用常规JOIN和JOIN FETCH。 例如,如果我们有这两个查询 和 它们之间有什么区别吗?如果是,何时使用哪个? 问题答案: 在这两个查询中,你正在使用JOIN查询与至少一个部门关联的所有员工。 但是,不同之处在于:在第一个查询中,你仅返回hibernate的Employes。在第二个查询中,你将返回员工和所有关联的部门。 因此,如果你使用第二个查询,则无需执行

  • 问题内容: 我有以下查询,希望在单个选择请求中运行: 问题在于,所有内容都是通过单独的多个查询获取的。我只希望在单个请求中获取团队和团队的球员以及每个球员的技能。但是取而代之的是,我有多个选择查询来获取每个球队,每个球员,每个球员的数据和技能。 以下是带有给定注释的实体: 游戏实体: 团队实体: 玩家实体: 您能指出犯下的错误吗?我需要一个选择查询来加载游戏,它是团队,团队的球员和每个球员的技能。

  • 请帮助我理解在哪里使用常规连接以及连接在哪里提取。 例如,如果我们有这两个查询 而且 它们之间有什么区别吗?如果是,何时使用哪一种?

  • 今天我学习了一个教程,作者在其中解释了hibernate关联一对多/多对一。我不想把他所有的代码都写在这里。所以,我试着把重点放在。。。 我们有两个实体:“团队”和“球员” 在代码中,我们有: 和 我最感兴趣的是回迁的类型。所以,我们加入了一支球队和一些属于这支球队的球员。我的DAO类标记为 现在我想从数据库中加载充满玩家集合的团队实体。 结果是,我将得到LazyInitializationExc

  • 问题内容: 我在终端中使用以下代码运行一些命令: 然后,我想知道运行此命令的结果是什么,例如,如果运行 我想阅读有关回购中更改的实际信息。有什么办法可以迅速做到这一点? 问题答案: 是用于将另一个程序作为子进程运行的类。您可以捕获程序的输出,错误输出,退出状态等等。 扩展我对xcode 6 swiftsystem()命令的回答,这是一个简单的实用函数,用于同步运行命令,并返回输出,错误输出和退出代