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

查询懒惰关联时Hibernate提取急切关联

牧业
2023-03-14
class Parent {
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    List<ChildOne> childrenOne;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    List<ChildTwo> childrenTwo;

    @OneToMany
    List<LazyChild> lazyChildren;

    @Id
    Long id;
}
select lazyChild from Parent p 
join p.lazyChildren lazyChild
where p.id = ? and lazyChild.mnemonic='AAA'

共有1个答案

呼延臻
2023-03-14

通过指定FetchType.Eager,您已经告诉Hibernate,每次它加载父对象时,您都希望它加载那些子对象。如果不希望发生这种情况,就不能指定一个Eger fetch类型。

Hibernate不够聪明,无法知道当您查询时,您只想要lazychild。它只知道您已经向parent对象发出了请求,因此它需要加载急切地提取子对象。

如果您是Hibernate的新手,您可能会发现这里的教程很有帮助。

 类似资料:
  • 问题内容: 我在多对一元素中声明的域对象上有一个属性。此属性的基本语法如下所示: 现在,我们的想法是让Hibernate不急于获取此属性。它可能为null,因此设置了未找到的忽略。 但是,Hibernate在加载包含此关联的类时,会在加载父类时自行加载实际的类(甚至不是代理)实例。由于某些属性的大小超过1MB,因此它们会占用大量堆空间。 但是,如果将not-found设置为exception(或默

  • 我去研究了关于JPA2.1规范的信息,这就是我发现的: 用于联接的联接条件来自映射的联接列。这意味着JPQL用户通常不必知道每个关系是如何连接的。在某些情况下,需要在连接条件中附加附加条件,通常是在外部连接的情况下。这可以通过ON子句来实现。ON子句在JPA2.1规范中定义,某些JPA提供程序可能支持ON子句。EclipseLink:Hibernate:TopLink-支持ON子句。 需要注意的是

  • 简介 Cabal-DB 的关联数据查询主要用了两个方法:->has('table') 和->belongs('table'), 因为其实数据库关联关系只有两种,一种是拥有(has)另一种是属于(belongs),如: 用户拥有更多个文章 文章拥有多个标签 文章属于一个用户 文章标签关联记录属于一个标签和一篇文章 语法 拥有关系查询语法: $row->has($name, $foreignKeyOr

  • 在Raku文档中,说明了收集-获取构造被延迟计算。在下面的示例中,我很难总结出构造的懒惰: 为什么我们在行为上有区别?尽管我们尝试做同样的事情:以懒惰的方式为数组分配Seq 有人能澄清一下这件事吗???

  • 我通过一个实体(因为关联有一个附加字段),在线程和参与者之间有一个多对多的关系。我有以下映射。 线程实体 参与实体 线程参与者实体 ThreadParticipantPK 现在,我尝试使用以下查询(使用Spring数据JPA)获取线程,并将Hibernate作为我的JPA提供者。 问题是,当中的关联的获取类型设置为,

  • 我通过提示检查了它在EclipseLink中的工作情况: 这个链接http://blog.ringerc.id.au/2012/06/jpa2-is-very-inflexible-with-eagerlazy.html暗示通过Hibernate是不可能的,建议手动获取。但是,我无法理解如何通过HQL或标准来实现它,特别是如何获得不在实体上但仅存在于数据库上的child.parent_id列。即避