Chcę przetestować metodę https://github.com/JonkiPro/popcorn/blob/develop/popcorn-core/src/main/java/com/jonki/popcorn/core/jpa/service/MoviePersistenceServiceImpl.java#L153. Klasa ma adnotację @Transactional, a listy encji są LAZY, więc nie ma problemu z używaniem listy podczas działania aplikacji. Napisałem test
@Test
public void canCreateOtherTitle() throws ResourceException {
...
this.moviePersistenceService.createOtherTitle(
otherTitle,
this.movieRepository.findByIdAndStatus(MOV_1_ID, DataStatus.ACCEPTED)
.orElseThrow(IllegalArgumentException::new)
);
...
}
po uruchomieniu testów otrzymuję wyjątek
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jonki.popcorn.core.jpa.entity.MovieEntity.otherTitles, could not initialize proxy - no Session
w linii
at com.jonki.popcorn.core.jpa.service.MoviePersistenceServiceImpl.createOtherTitle(MoviePersistenceServiceImpl.java:162)
czyli tutaj w kodzie https://github.com/JonkiPro/popcorn/blob/develop/popcorn-core/src/main/java/com/jonki/popcorn/core/jpa/service/MoviePersistenceServiceImpl.java#L162
Cały test jest tutaj https://pastebin.com/fewHBUff
Na SO https://stackoverflow.com/questions/51343821/failed-to-lazily-initialize-a-collection-of-rolesomeenttiy-othertitles zasugerowano, abym dodał w teście również adnotację @Transactional, ale powoduje to wyjątek
Cannot start new transaction without ending existing transaction
Dlaczego podczas testów, listy ładowane leniwie nie są inicjalizowane mimo adnotacji @Transactional
? Przypomnę, że podczas normalnego uruchomienia aplikacji, to wszystko działa poprawnie.