Почему hibernate извлекает список перед обновлением сущности - PullRequest
0 голосов
/ 22 апреля 2020

Ниже приведено сопоставление

Внутри A.class

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, 
orphanRemoval = true, mappedBy = "aObj")
private List<B> listB;

Внутри B.class

@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
@JoinColumn(name = "a_id")
private A aObj;

У меня есть 2 объекта A и B. Объект A содержит список как отношение @OneToMany, а B содержит ссылку на A как двунаправленное отношение «один ко многим». Операция вставки работает нормально, но когда я пытаюсь обновить запись.

A a = repository.findById(1);
a.setName("Test Name");
repository.save(a);

Проблема здесь в том, что hibernate выполняет один дополнительный запрос select all all для получения List.

Последовательность следующая

Hibernate: select query for A
Hibernate: select all query for B
Hibernate: update query for A

Теперь, почему здесь выбираются все запросы для B Я определил стратегию ленивого извлечения на обоих концах.

1 Ответ

0 голосов
/ 22 апреля 2020

Вам необходимо использовать:

@OneToMany(mappedBy = "{your_var}", fetch = FetchType.LAZY)
private List<B> list;

И позаботиться, если вы используете каскад:

@OneToMany(cascade = {Cascade.PERSIST}, orphanRemoval = true)
private List<B> list;

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

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