Мне нужно получить простой список родительских объектов с нулевыми значениями для дочерних элементов. Но когда я использую метод findAll(), а затем пытаюсь получить дочерний объект, я получаю LazyInitializationException: не удалось лениво инициализировать набор ролей: ... не удалось инициализировать прокси - нет сеанса. Я вижу объяснение этой проблемы (о Lazy/Eager, JOIN FETCH), но мне нужно получить значение null для дочерних объектов без запроса для дочерних объектов.
@Entity
public class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "parent")
Set<Child> childs;
@Entity
public class Child {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
Parent parent;
@Service
public class ParentService {
@Autowired
ParentRepository parentRepository;
public List<Course> getParentList() {
return parentRepository.findAll();
}
В спящем режиме я получаю правильный запрос:
select parent0_.id as id1_0_ from parent parent0_
Перед тестом я добавляю несколько родительских сущностей в БД, результат не пустой, и в этом тесте я получаю ошибку LazyInitializationException
@Test
public void checkParentListFormat() {
List<Parent> parentList = parentService.getParentList();
Assertions.assertThat(parentList.get(0).getChilds()).isNull();
}
Я читал о DTO, но можно ли получить простую сущность с нулевыми значениями? Спасибо