Ленивая инициализация при работе с БД

Если убрать @Trasactional(timeout = 2), то в консоль падает ошибка, о том что сессия закрыта, вариант с featch = FeatchType.EAGER не подходит. Возможно ли как-то избавиться от данного костыля? Я прочитал про Hibernate.initialize(), но не понял в какой момент его нужно применить.

Использую данный тест для проверки данных:

@SpringBootTest 
@TestInstance(TestInstance.Lifecycle.PER_CLASS) 
class SpringHibernateApplicationTests { 

@Autowired 
private PupilRepository pupilRepository; 

@Autowired 
private ClassRoomRepository classRoomRepository; 

@Autowired 
private TeacherRepository teacherRepository; 

@BeforeAll 
@Rollback(value = false) 
public void contextLoads() { 
Pupil pupil = new Pupil(); 
pupil.setName("Anton"); 
pupil.setSurname("Savridov"); 

Pupil pupil1 = new Pupil(); 
pupil1.setName("Elena"); 
pupil1.setSurname("Antonova"); 

Teacher teacher = new Teacher(); 
teacher.setName("Alla"); 
teacher.setSurname("Aronova"); 
teacher.setDiscipline("Mathematics"); 

ClassRoom classRoom = new ClassRoom(); 
classRoom.setName("1A"); 

pupil.setClassRoom(classRoom); 
pupil1.setClassRoom(classRoom); 
teacher.setClassRoom(classRoom); 

classRoomRepository.save(classRoom); 
teacherRepository.save(teacher); 
pupilRepository.save(pupil); 
pupilRepository.save(pupil1); 

} 

@Test 
@Transaction(timeout = 2)
public void createEntity() { 
System.out.println("Ученики"); 
System.out.println("----------------------------"); 
Iterable<Pupil> allPupil = pupilRepository.findAll(); 
for (Pupil pupil1 : allPupil) { 
System.out.println(pupil1.getId() + " " + 
pupil1.getName() + " " + 
pupil1.getSurname()); 
} 
System.out.println("----------------------------"); 

Iterable<Teacher> allTeacher = teacherRepository.findAll(); 
for (Teacher teacher1 : allTeacher) { 
System.out.println("Учителя"); 
System.out.println("----------------------------"); 
System.out.println(teacher1.getId() + " " + 
teacher1.getName() + " " + 
teacher1.getSurname() + " " + 
teacher1.getDiscipline()); 
System.out.println("----------------------------"); 
} 

System.out.println("Класс"); 
System.out.println("----------------------------"); 
Iterable<ClassRoom> allClassRoom = classRoomRepository.findAll();
allClassRoom.forEach(c -> System.out.println(c.getId() + " " + c.getName())); 
allClassRoom.forEach(c -> c.getTeacher().forEach(t -> System.out.println(t.getId() + " " + t.getName() + " " + t.getSurname() + " " + t.getDiscipline()))); 
allClassRoom.forEach(c -> c.getPupil().forEach(p -> System.out.println(p.getId() + " " + p.getName() + " " + p.getSurname()))); 
System.out.println("----------------------------"); 
} 

Ошибка:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.SchoolJournal.SpringHibernate.model.ClassRoom.teacher, could not initialize proxy - no Session

Ответы (0 шт):