一个非常奇怪的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
中一组非常特定的idList
,当尝试访问LazyInitializationException
中特定summaries
的{{1}}集合时,我得到id
查询返回了{1}}个。例如,查询返回5个Document
(让Documents
的第1、2、3、4、5条说),并且仅在其中一个中,id
集合会引发异常(将其删除)。是summaries
和Document
)。另一个id = 2
的集合中填充有条目或为空(如果该文档没有摘要)。
事实1 :引发异常的Documents
(Document
)应该将此集合设为空(此文档没有摘要)。
事实2 :仅针对给定的特定id:2
引发异常。如果从该列表中删除了idList
(但受影响的id
(2)仍在列表中),则不会引发异常。例如。通过id
或idList: {1, 2, 3, 4}
或{2, 3, 4, 5}
等不会抛出{1, 2, 5}
。
这是LIE
的讨厌的错误吗?经过Hibernate
和5.2.17.Final