Как перестать выбирать дочерние записи из одной из таблиц во многих отношениях во время объединения таблиц? - PullRequest
0 голосов
/ 18 марта 2019

Я знаю, что такие вопросы могли задаваться в прошлом, но я не мог найти решение своей конкретной проблемы:

У меня есть две сущности A и B, имеющие ManyToMany отношение, и там первичные ключи хранятся в таблице AB, изображающей их отношение:

public class A {

  @Id
  private Integer id1;

  @ManyToMany(fetch=FetchType.Lazy,joinColumn)
  @JoinTable(name="AB",joinColumns = { @JoinColumn(name = "id1", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "id2", nullable = false, updatable = false) })
  private Set<B> bs;

}

public class B {

  @Id
  private Integer id2;

  @ManyToMany(fetch = FetchType.LAZY, mappedBy = "bs")
  private Set<A> as;

  @OneToMany(fetch = FetchType.LAZY, mappedBy = "b")
  @Cascade({ CascadeType.ALL, CascadeType.DELETE_ORPHAN })
  private Set<C> cs;     

}

Я пытаюсь получить запрос из списка ниже:

from(a)
.where(a.id1.eq(id))
.leftJoin(a.bs,b).fetchJoin().fetchOne();

Теперь проблема в том, что я получаю весь набор объектов C, связанных с B, с помощью этого запроса, но я не хочу этого из-за проблем с производительностью. Есть ли способ, которым я могу избежать этого?

...