меня такая ситуация (подробности внизу):Кэширования ленивого загружена Коллекция ленивой нагруженной связи с открытых сеансов в просмотре
- X является зимует сущностью
- ХУ является lazy- загружается ссылка на Y, другой зимуют объект
- Yz ленивый загружен, кэшированные коллекция Hibernate образований Z
в пост-транзакции Spring бина, в открытой сессии-в-зрения, я доступ к Xyz и получение "org.hibernate.Hi bernateException: невозможно разрешить владельцу сборщика загрузок [...] для кэширования второго уровня ". Отладка в спящий режим 4.3.8. Final Я обнаружил, что X.y лениво загружается с использованием временного сеанса и поэтому недоступен в «оригинале» StatefulPersistenceContext
, где CollectionLoadContext
ищет его.
Так я делаю то, что просто не сделано? Должен ли я явно запускать эту ленивую загрузку заранее или удалить кеширование?
public class Teachable {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "fk_org_element_sch", nullable = false)
protected ElementSch element;
}
public class ElementSch {
@OneToMany(targetEntity = ElementConnectionSch.class)
@JoinColumn(name = "fk_org_element_parent")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Collection<ElementConnectionSch> childConnections;
}
public class ElementConnectionSch {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="fk_org_element_parent")
private ElementSch parent;
}
После transacation было совершенно, но до сих пор в открытых сеансах в поле зрения, я звоню Teachable.getElement(). GetChildConnections() и получение HibernateException. От отладки я вижу, что ElementSch и ElementConnectionSch лениво загружаются в отдельные сеансы, т. Е. Основной сеанс загружает Teachable, а для ElementSch и ElementConnectionSch используются два отдельных временных сеанса.
Можете ли вы также загрузить свои hbm-файлы? Также * fetch * значение свойства для коллекции X.y ?? –