【问题标题】:Is it possible for Hibernate to fetch two levels of sets with one select?Hibernate 是否可以通过一次选择获取两个级别的集合?
【发布时间】:2013-03-18 15:50:34
【问题描述】:

我有三个实体:

@Entity
@Table(name="a")
class A {

  @Id
  Long id;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "a_id")    
  Set<B> bs;

  // ... other fields
}

@Entity
@Table(name = "b")
class B {

  @Id
  Long id;

  @OneToMany(fetch = FetchType.EAGER)
  @JoinColumn(name = "c_id")
  Set<C> cs;

  // ... other fields
}

@Entity
@Table(name = "c")
class C {

  @Id
  Long id;

  // ... other fields
}

当我使用来自 JPA 的 Criteria API 来获取 A 时,Hibernate 首先只获取 A,然后为每个 A、所有 B,最后为每个 B 所有 C。

是否可以通过一个理论上可行的选择来强制获取?

【问题讨论】:

    标签: java hibernate one-to-many hibernate-onetomany


    【解决方案1】:

    Hibernate 不支持很好地获取多个 Eager 集合。看看这里。

    顺便说一句,你真的需要那些急切加载的集合吗?

    Hibernate cannot simultaneously fetch multiple bags

    【讨论】:

    • 我选择哪种获取方式并不重要。它会立即转换为另一个对象图以保存在内存中。
    • 我尝试了另一种方法并使用 C 作为根来获取。但似乎它并没有更快地工作。可能是因为获取本身的成本很高,我敢打赌,那是因为这里的 CLOB 字段。我将保持原样并将获取更改为 LAZY。需要忍受这个。
    【解决方案2】:

    听起来好像没有internal iteration 是不可能的。

    在这种情况下,我想建议Hibernate Native Sql query

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      相关资源
      最近更新 更多