Почему возникает исключение lazyInitializationException с @Transactional? - PullRequest
0 голосов
/ 19 июня 2019

У меня есть лица следующим образом:

public class FeatureType {
   @Id Sring id;
   ...
   @OneToMany(mappedBy="featureType", fetch=FetchType.LAZY)
   List<Metadata> entities = new ArrayList();
}

public class Metadata{
   ...
   @ManyToOne
   FeatureType featureType;
}

Теперь хранилище featureType выглядит следующим образом:

@Repository
public interface FeatureTypeRepository extends JpaRepository<FeatureType, String> 
{}

Я создал преобразователь String to FeatureType следующим образом:

class StringToFeatureType implement Converter<String, FeatureType>
{
   private FeatureTypeRepsitory rep;
   public StringToFeatureType(FeatureTypeRepsitory rep){this.rep = rep;}
   @Override
   public FeatureType convert(String name)
   {
       return rep.findByIdOrNull(name);
   }
}

У меня проблема с контроллером:

@RestController
public FeatureTypeController()
{
   @Transactional
   @GetMapping("/featureType-{featureType}/metadata")
   List<Metadata> getMetadata(FeatureType featureType)
   {
      system.out.println(entityManager.contains(featureType));//print false
      system.out.println(featureType.getMetadata().size());//Occur Error here
      return featureType.getMetadata();
   }
}

У меня есть открытая транзакция, но когда программа получает строку system.out.println(featureType.getMetadata().size());, возникает исключение следующим образом:

org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекция ролей: fava.FeatureType.metadata, не удалось инициализировать прокси - без сеанса

Я знаю, что если у featurType есть какие-то метаданные, проблема возникает из-за ошибки в сериализации, но возникает из-за ошибки в строке system.out.println(featureType.getMetadata().size()). Что за проблема?

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