Я пытаюсь обновить объект с помощью Hibernate и ищу разъяснения, как это работает. Код выглядит следующим образом:
public void updateReadingCompRecall(ReadingCompRecall rcr) {
ReadingCompRecall oldRecall = getReadingCompRecall(rcr.getId());
oldRecall.setNotes(rcr.getNotes());
if(rcr.getQuestionRecall() != null && !rcr.getQuestionRecall().isEmpty()) {
if(oldRecall.getQuestionRecall() == null ) {
List<ReadingCompQuestionRecall> newList = new ArrayList<>();
rcr.getQuestionRecall().forEach(qr -> {factory.getCurrentSession().save(qr);
newList.add(qr);});
oldRecall.setQuestionRecall(newList);
}else {
rcr.getQuestionRecall().forEach(qr -> {factory.getCurrentSession().save(qr);
oldRecall.getQuestionRecall().add(qr);});
}
}
public ReadingCompRecall getReadingCompRecall(long compKey) {
ReadingCompRecall rcr = null;
rcr = factory.getCurrentSession().get(ReadingCompRecall.class , compKey);
return rcr;
}
Объект «ReadingCompRecall» имеет список типа «ReadingCompQuestionRecall», который отображается в другую таблицу в отношении «один ко многим» с типом выборки LAZY. Я передаю недавно обновленный объект ReadingCompRecall и хочу обновить его список типа «ReadingCompQuestionRecall». Итак, я начинаю с проверки, есть ли у объекта ReadingCompRecall нулевой список. Однако вызов get в этом списке пытается получить список из базы данных, что, очевидно, приведет к исключению LazyInitializationException. Если я получаю список из базы данных с помощью Hibernate, я получаю старый список, который еще не обновлялся. Я новичок в Hibernate, поэтому не уверен, есть ли правильный способ сделать это или нет. Любой совет будет очень признателен. Примечание: в этой ситуации в прошлом я просто передал фактический список типа «ReadingCompQuestionRecall» вместо объекта, который содержит список. Это позволяет мне проверять наличие null и пусто без вызова DB, однако код будет намного аккуратнее, если я просто передам полный объект, так как у него есть три других списка, которые также необходимо синхронизировать. Это работает только что в списках, но я искал что-то попроще. Спасибо, ребята.