Двунаправленный Hibernate-запрос создает 1+ N запросов при использовании JoinColumns - PullRequest
0 голосов
/ 13 февраля 2019

Родительская сущность имеет аннотацию следующим образом:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "a")
private Set<Child> b;

Дочерняя сущность имеет аннотацию следующим образом:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "col_A")
private Parent a;

При выполнении запроса FETCH соединения для Родителя через репозиторий, например:

@Query("select a " +
            "from Parent a " +           
            "left join FETCH a.b " +
            "where a.prop = <some_value> ")

Запрос работает, как и ожидалось, выполняя одно большое соединение, которое возвращает A и его дочерние элементы.Однако, если мы изменим аннотацию дочернего элемента следующим образом, запрос начнет выполняться 1 + N:

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
           @JoinColumn(name = "COL_A", referencedColumnName = "COL_A"),
            @JoinColumn(name = "COL_B", referencedColumnName = "COL_B")
    })
    private Parent a;

COL_A - это первичный ключ Parent, а COL_B - неключевой столбец, используемый в качестве раздела.

...