Я храню объекты гибернации в ehcache. Когда делается вызов фасадному слою для извлечения объекта, мой перехватчик вызывает этот метод и кэширует его. В следующий раз при вызове того же метода сущность будет возвращена из кеша. Это все работает нормально.
Моя сущность имеет некоторые свойства (объекты или связанные сущности), которые определены как FetchType.Lazy. Это что-то вроде этого,
@JoinColumn(name = "inventory_item_oid", referencedColumnName = "inventory_item_oid")
@ManyToOne(fetch = FetchType.LAZY)
private InventoryItem inventoryItem;
Следовательно, не все свойства загружены. Когда предмет инвентаря необходим, он вызывается. Этот вызов вызывает исключение LazyInitialization Exception.
Поскольку мои кэшированные значения живут один день, их можно вызывать любое количество раз, прежде чем истечет срок их действия.
Один из этих вызовов вызывает указанное выше исключение.
Я пришел к выводу, что с помощью длительных сеансов гибернации я могу решить эту проблему. Но это не работает, потому что мое приложение основано на запросе/ответе.
Есть еще один способ, где мне нужно проверить, является ли InventoryItem нулевым или нет, прежде чем обращаться к его свойствам, если он нулевой, тогда мне нужно получить это значение отдельно и прикрепить его к родителю. Кажется, это хорошо... но требует много работы, так как у меня много сущностей.
Я хотел бы знать, есть ли другой способ получить эти объекты, определенные как ленивые.