Как обновить отношение типа коллекции с помощью mappedBy в Hibernate?

У меня есть два связанных лица, скажем

@Entity
public class Book {
    @ManyToOne
    Shelf shelf;
}

@Entity
public class Shelf {
    @OneToMany(mappedBy="shelf")
    Set<Book> books;
}

Если я возьму пустую полку (без книг), создаю и сохраняю новую книгу на полке, а затем снова извлекаю эту полку, ее коллекция книг пуста. Когда я запускаю его с ведением журнала отладки, я вижу, что Hibernate не ищет полку второй раз, он просто возвращает ее из кэша сеанса, где он лежит, не зная, что его коллекция книг была обновлена.

Как можно избавиться от эффекта и получить обновленное состояние полки?

Спасибо,
Артем.

3 ответа

Решение

Похоже, вы должны поддерживать его вручную в рамках одного сеанса (транзакции). Ни @Cascade, ни EAGER не влияют на кеш сессии

@Cascade - это то, что вы ищете?

Попробуйте установить тип выборки EAGER для книг, установленных на полке:

@Entity
public class Shelf {
    @OneToMany(mappedBy="shelf",fetch=FetchType.EAGER)
    Set<Book> books;
}
Другие вопросы по тегам