Closed svilkata closed 2 years ago
Привет!
Ексепшъна, за който говорим няма много общо с базата която използваш и се хвърля от хибернейт. Релациите by default са LAZY (мързеливи):
@ManyToMany
private List<ItemEntity> products;
Това означава, че като си поискаш баскета хибернейт няма да направи JOIN с продуктите а вместо това ще ти върне един прокси обект дето реално няма продукти в него. Ако се опиташ да ги достъпиш хибернейт трябва да направи заявка в момента на достъп. Затова е и LAZY. Само че, за да се случи това нещо трябва да имаш отворена сесия, а такава няма. Можеш да подходиш по разнични начини.
@Transactional
)Има доста ресурси в нета по този въпрос. Мисълта ми е, че грешката не е свързана с базата. Може би да започнеш от тук - https://www.baeldung.com/hibernate-initialize-proxy-exception Запознай се също и с Transactional анотацията.
Поздрави, Л.
Мерси много. Използвах @Transactional анотация, и в класа ServiceBasketTest.java тествах метод по метод, а не директно целия клас. И вече имам 95% покритие на service слоя :)
А вариантът с JOIN FETCH работеше само ако има артикули. При 0 артикули JOIN FETCH гърмеше.
Здравей Лъчо,
Вече имам над 60% покритие по редове на Service слоя тестовете. Но въпреки това, има един проблем.
През цялото време имах чувство, че при работа с Repository-тата на in-memory базата данни, има някакъв проблем. В оригиналния си вид този ред връща или баскет с продукти или баскет с празен лист и си работи както трябва (преди 2-3 седмици доста си бях играл, че да заработи изобщо) BasketOrderEntity basketOrder = this.basketRepository.findBasketOrderEntitiesById(basketId).orElseThrow();
Когато обаче тествам с интеграционен тест, горния ред не работи като дава грешка LazyInitializationException exception.
Кофти така като няма съвместимост когато тествам...
Ако може да помогнеш някак - видях че има анотация @DataJpaTest, но с нея изобщо теста не тръгва.
Всъщност проблема е голям, защото аз почти навсякъде използвам this.basketRepository.findBasketOrderEntitiesById(basketId).orElseThrow();