我這種情況(在底部的細節):緩存懶惰從開放式會話中視加載延遲加載關係的集合
- X是一個Hibernate實體
- XY是lazy-加載參考Y,另一休眠實體
- yz爲休眠實體的延遲加載,緩存收集ž
在交易後的Spring bean,開放式會話中視中,我訪問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文件嗎?另外*獲取X.y集合的屬性值? –