Я пытаюсь использовать EhCache в качестве кэша L2 в приложении Spring Boot, используя Spring Data JPA и Hibernate. В настоящее время я испытываю проблему с кэшированием ленивого загруженного атрибута. У меня есть сущность, определенная следующим образом:
@Entity
@Cacheable
@Cache(usage = CacheConcurrentStrategy.READ_WRITE)
public class Foo {
@Id
private long id;
@ManyToOne(fetch = LAZY)
private Bar bar;
}
, и соответствующая сущность Bar
также имеет аннотации кэширования. Мой запрос findById
на FooRepository
включает @EntityGraph(attributePaths="bar")
.
У меня есть контроллер, который использует DomainObjectConverter
для автоматического выполнения запроса объекта Foo
при вызове метода (я понимаю, что он ищет подходящий репозиторий и вызывает метод findById) ,
При первом вызове все работает нормально (и я могу разыменовать объект bar), но когда объект Foo
извлекается из кэша L2, я получаю LazyInitializationException
. Если я отмечу поле для извлечения EAGER
, я могу видеть, что Bar
извлекается из кеша, как я и надеюсь, но я бы хотел по возможности этого избежать, поскольку хочу убедиться, что мои запросы извлечения как максимально эффективный.
Я также пытался добавить аннотацию @Cacheable
в поле bar
, но, похоже, это не имеет значения.