У меня есть модель с двумя отношениями:
@Entity
@Table(name = "data_model")
public class DataModel {
@Id
@GeneratedValue
@Column(name = "model_id")
private Integer id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<OutputField> outputFields;
@OneToMany(mappedBy = "dataModel", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE})
private List<Query> queries;
//some another fields
}
Я использую Spring Data JPA
и хочу обновить сущность. Я пишу простой сервис:
@Service
public class DataModelService {
@Autowired
private DataModelRepository dataModelRepository;
@Transactional
public DataModel createOrUpdate(DataModel dataModel) {
return dataModelRepository.save(dataModel);
}
//another methods
}
Я пишу простой тест:
public class DataModelServiceTest {
@Autowired
private DataModelService dataModelService;
@Test
void shouldUpdateDataModel() {
DataModel dataModelBeforeUpdate = dataModelService.getById(1);
dataModelBeforeUpdate.getQueries().get(0).setSqlQuery("SELECT 1");
DataModel updatedModel = dataModelService.createOrUpdate(dataModelBeforeUpdate);
assertThat(updatedModel.getQueries(), notNullValue());
}
}
Но я получаю ошибку, когда пытаюсь вызвать метод getQieries()
:
Unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception.
В отладке я вижу: ![enter image description here](https://i.stack.imgur.com/mMwy9.png)
Вопросы:
- Почему возникает эта ошибка и как ее можно исправить? Как заставить hibernate возвращать все ссылки после обновления?
- Почему поле
outputFields
заполнено правильно, а поле queries
нет?