Как обновить отношение типа коллекции с помощью mappedBy в Hibernate?
У меня есть два связанных лица, скажем
@Entity
public class Book {
@ManyToOne
Shelf shelf;
}
@Entity
public class Shelf {
@OneToMany(mappedBy="shelf")
Set<Book> books;
}
Если я возьму пустую полку (без книг), создаю и сохраняю новую книгу на полке, а затем снова извлекаю эту полку, ее коллекция книг пуста. Когда я запускаю его с ведением журнала отладки, я вижу, что Hibernate не ищет полку второй раз, он просто возвращает ее из кэша сеанса, где он лежит, не зная, что его коллекция книг была обновлена.
Как можно избавиться от эффекта и получить обновленное состояние полки?
Спасибо,
Артем.
3 ответа
Решение
Похоже, вы должны поддерживать его вручную в рамках одного сеанса (транзакции). Ни @Cascade, ни EAGER не влияют на кеш сессии
Попробуйте установить тип выборки EAGER для книг, установленных на полке:
@Entity
public class Shelf {
@OneToMany(mappedBy="shelf",fetch=FetchType.EAGER)
Set<Book> books;
}