0

меня такая ситуация (подробности внизу):Кэширования ленивого загружена Коллекция ленивой нагруженной связи с открытых сеансов в просмотре

  • 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 используются два отдельных временных сеанса.

+0

Можете ли вы также загрузить свои hbm-файлы? Также * fetch * значение свойства для коллекции X.y ?? –

ответ

0

Это был определен как вопрос с нашей стороны в связи с Hibernate обновления версии:

Мы используем Spring WebFlow и поместить Hibernate объекты в областях потока. Чтобы это правильно работало по нескольким вызовам в потоке, мы добавляем повторные прикрепления оберток к сущностям и коллекциям, чтобы они забирали сеанс текущего вызова вместо того, чтобы использовать тот, который они были созданы, теперь закрыты.

С обновлением версии произошли изменения в том, как была выполнена эта инъекция, и, хотя работа была применена, до были загружены исходные сопоставления, то есть мы зациклились на пустых итераторах и ничего не вводили.