如何在Hibernate中高效加载完整的@ManyToMany自联接表

时间:2015-07-20 07:40:06

标签: hibernate many-to-many lazy-loading

我有一个简单的“区域”表,它与通过连接表建模的关系。区域可以是几个超区域的一部分,也可以包含许多子区域。我的地区类包含对其超区域及其子区域的引用。两组都可能是空的。总共我有几千个条目,随着时间的推移它们不会有太大变化。我的问题是通过hibernate HQL将整个表有效加载到内存中。到目前为止,尽管我指定了延迟加载,但hibernate尝试创建查询以获取每个区域的超级区域。我想我忽略了一些配置或参数。

班级

width 100%

我尝试通过HQL加载所有区域的代码:

@Entity
@Table(name = "region", catalog = "things")
public class Region extends Thing{

  private Set<Region> subRegions = new HashSet<>();
  private Set<Region> superRegions = new HashSet<>();

  @ManyToMany(fetch = FetchType.LAZY)
  @JoinTable(name="region_region",
        joinColumns={@JoinColumn(name="parent_id")},
        inverseJoinColumns={@JoinColumn(name="child_id")}
  )
  public Set<Region> getSubRegions(){
    return this.subRegions;
  };

  public void setSubRegions(Set<Region> subRegions) {
    this.subRegions = subRegions;
  }

  @ManyToMany(mappedBy="subRegions")
  public Set<Region> getSuperRegions(){
    return this.superRegions;
  }

  public void setSuperRegions(Set<Region> superRegions) {
    this.superRegions = superRegions;
  }

为什么这会导致如此多的查询(我怀疑是N + 1,虽然我没有计算),不仅仅是一个?

我需要做什么,快速将表格加载到内存中。显然,单个数据库查询就足够了。

0 个答案:

没有答案