org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию ролей с использованием интерфейса JpaRepository - PullRequest
1 голос
/ 29 января 2020

Я получаю следующее исключение:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...