LazyInitializationException с использованием улучшения спящего режима с помощью @Basic (fetch = FetchType.LAZY) - PullRequest
1 голос
/ 31 октября 2019

У меня есть эта постоянная сущность с полем lob, которую я с нетерпением выбираю, поэтому я настроил hibernate-gain-maven-plugin и сделал его ленивым:

@Lob
@Column(name = "MY_FIELD")
@Basic(fetch = FetchType.LAZY)
private byte[] lazyField;

Теперь яполучение LazyInitializationException при довольно простом тесте:

myJpaRepo.findAll().get(0).getLazyField()

Невозможно выполнить запрошенную отложенную инициализацию [MyEntity.lazyField] - ни один сеанс и настройки не запрещают загрузку вне сеанса

Я использую Spring Boot и ничего не сделал для настройки режима гибернации. В этом тесте используется база данных h2.

MyRepo помечается @ Transactional.

Если я также аннотирую метод выполнения, исключение не выдается:

@Transactional
public void test(){
    myJpaRepo.findAll().get(0).getLazyField()
}

WillМне нужно аннотировать транзакцию каждый раз, когда кто-то пытается получить ленивое поле, или я могу что-то еще сделать, чтобы избежать этого?

1 Ответ

0 голосов
/ 01 ноября 2019

Ошибка говорит о том, что вы пытаетесь получить доступ к сопоставлению за пределами границы сеанса / транзакции гибернации.

В этом случае вам придется также аннотировать метод тестирования с помощью @transaction, чтобы вы находились в пределах границы транзакции иактивный сеанс гибернации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...