org.hibernate.LazyInitializationException: не удалось лениво инициализировать коллекцию ролей: studentystem2.ikubinfo.entity.Student.classes - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть эта ошибка, которую я не могу найти причину, почему происходит. К сожалению, я не могу ответить на другие вопросы.

SEVERE: Servlet.service() for servlet [rest] in context with path [/studentsystem2] threw exception [Request processing failed; nested exception is org.modelmapper.MappingException: ModelMapper mapping errors:

1) Converter org.modelmapper.internal.converter.CollectionConverter@2f75990d failed to convert java.util.List to java.util.List.

1 error] with root cause
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: studentsystem2.ikubinfo.entity.Student.classes, could not initialize proxy - no Session

Это мой ученический класс

Student.java

@Entity
@Table(name="student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name="student_id")
    private long id;

    @NotNull
    @Column(name = "firstname")
    private String firstName;

    @NotNull
    @Column(name = "lastname")
    private String lastName;

    @OneToMany(mappedBy = "student", fetch = FetchType.LAZY)
    private List<Classroom> classes;

    @NotNull
    @Temporal(value = TemporalType.DATE)
    private Date birthdate;

    private boolean flag;

    public Student() {

    }

}

Я использовалЗависимость ModelMapper для преобразования из сущности в модель. Ниже вы можете найти класс StudentConverter

StudentConverter.java

@Component
public class StudentConverter {

    private ModelMapper modelMapper = new ModelMapper();

    public StudentConverter() {

    }

    public Student toEntity(StudentModel model) {
        return modelMapper.map(model, Student.class);
    }

    public StudentModel toModel(Student student) {
        return modelMapper.map(student, StudentModel.class);
    }

    public List<StudentModel> toModel(List<Student> entityList) {
        List<StudentModel> modelList = new ArrayList<StudentModel>();
        for (Student student : entityList) {
            modelList.add(toModel(student));
        }
        return modelList;
    }
}

1 Ответ

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

, потому что modelmapper пытается получить доступ (внутренне использует отражение для копирования) к элементу данных (private List<Classroom> classes;) объекта Student вне контекста транзакции. Вы должны использовать fetch = FetchType.EAGER или вы можете присоединиться, чтобы получить эту коллекцию вместе с Student сущностью.

Отредактировано

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