Я получаю следующее исключение:
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
Я понимаю, почему это происходит. Я LAZY-loading
коллекций в моей сущности, и когда я пытаюсь get
один из них, сессия уже закрыта. Я не могу sh использовать load EAGER-ly
Поскольку я просто расширяю JpaRepository
, я не управляю своей сессией вручную; поэтому я прочитал, что могу исправить проблему, добавив @Transactional
к вызывающему методу. После того, как это не сработало, я попытался поместить его в несколько мест (см. Код ниже), но безуспешно.
Может кто-нибудь сказать мне, где я иду не так?
Телефонный код
//@Transactional ***I TRIED PUTTING IT HERE***
public void run() {
MyParent myParent = myParentRepository.findByName("testName");
myParent.getChildren(); // fails here
}
MyParentRepository.class
@Repository
public interface MyParentRepository extends JpaRepository<MyParent, Long> {
//@Transactional ***I TRIED PUTTING IT HERE***
MyParent findByName(@Param("name") String name);
}
MyParent.class
@Entity
public class MyParent {
// some fields
@OneToMany (fetch = FetchType.LAZY, mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MyChild> children;
public List<MyChild> getChildren() {
return this.children;
}
}
MyChild.class
@Entity
public class MyChild {
// some fields
@ManyToOne(fetch = FetchType.LAZY)
private MyParent parent;
}