如果你知道Comment
每次检索a时都希望看到全部,Topic
则将字段映射更改为comments
:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL)
private Collection<Comment> comments = new LinkedHashSet<Comment>();
默认情况下,集合是延迟加载的。
根据我的经验,我有以下方法来解决LazyInitializationException:
(1)使用Hibernate.initialize
Hibernate.initialize(topics.getComments());
(2)使用JOIN FETCH
你可以在JPQL中使用JOIN FETCH语法来显式提取子集合。这有点像EAGER提取。
(3)使用OpenSessionInViewFilter
LazyInitializationException经常在视图层中发生。如果使用Spring框架,则可以使用OpenSessionInViewFilter。但是,我不建议你这样做。如果使用不正确,可能会导致性能问题。