очень странно 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