Исключение LazyInitializationException (иногда) с запросом «левого соединения» - PullRequest
2 голосов
/ 04 апреля 2019

очень странно LazyInitializationException, это иногда случается.

@Entity
class Document {

    @Id
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "document", cascade = CascadeType.ALL)
    private Set<Summary> summaries = new HashSet<>();
}

@Entity
class Summary {

    @Id
    private Long id;

    @ManyToOne(optional = false, fetch = FetchType.EAGER)
    private Document document;
}

У меня есть следующее @Query в методе JpaRepository

@Query("select distinct d from Document d left join fetch d.summaries where d.id in (:idList)")

Для очень определенного набора id s в idList я получаю LazyInitializationException при попытке получить доступ к коллекции summaries для определенного id Document s, возвращенного из запроса. Например, запрос возвращает 5 Documents (скажем, с id s 1, 2, 3, 4, 5), и только в одном из них коллекция summaries выдает исключение (пусть это будет Document с id = 2). В других Documents эта коллекция заполнена записями или пуста (если для этого документа нет сводок).

Факт 1 : Document (id:2), который вызывает исключение, должен иметь эту коллекцию пустой (для этого документа нет сводок).

Факт 2 : исключение выдается только с заданным, конкретным idList. Если id удаляется из этого списка (но затрагивающий id (2) все еще находится в списке), исключение не выдается. Например. пропуск idList: {1, 2, 3, 4} или {2, 3, 4, 5} или {1, 2, 5} и т. д. не приведет к выдаче LIE.

Это неприятная ошибка Hibernate? Протестировано с 5.2.17.Final и 5.3.7.Final

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...