У меня есть лица следующим образом:
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())
. Что за проблема?