У меня есть приложение для восстановления данных пружины со связью между типами Match и Round
@Entity
public class Match {
@OneToMany
private List<Round> rounds;
...
}
Когда между матчем и раундом создается связь, например, вот так
curl -X PUT -d "http://localhost:8080/rounds/2" -H "Content-Type:text/uri-list" http://localhost:8080/matches/1/rounds;
я фиксирую это с помощью EventHandler, чтобы сделать некоторые обновления для моей модели домена:
public class MatchEventHandler
@HandleAfterLinkSave
public void handleLinkSave(Match match, List<Round> rounds) {
...
}
Мне нужно получить доступ ко второму аргументу, чтобы выполнить обновление, но это происходит, например, с rounds.get (0),возвращает
org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию, не удалось инициализировать прокси - нет Сеанс
Чтение других потоков о спящих режимах. LazyInitializationExceptions Я вижу в основном три подхода, которые предлагаются:
- Используйте Hibernate.initialize () - я не вижу, какой метод я мог бы вызвать, и это добавило бы некрасивую зависимость в инфраструктуру Hibernate
- Поместите метод контроллера в транзакцию - iпонять, что весенние данные уже все помещают в транзакцию.Кроме того, поскольку это приложение для восстановления данных весной, я не использую какой-либо контроллер или сервисный уровень, и поэтому я не буду знать, что именно вводить в транзакцию.
- Установите FetchType.EAGER для отношения - хотя на самом деле это не такправильное решение я попробовал.В этом случае второй аргумент метода @HandleAfterLinkSave представляет собой пустой список, поэтому он также не доставляет ожидаемый результат.