【发布时间】:2016-02-25 18:47:58
【问题描述】:
我将休眠实体存储在 ehcache 中。当调用外观层以检索实体时,我的拦截器将调用该方法并将其缓存。下次调用相同的方法时,实体将从缓存中返回。这一切都很好。
我的实体有一些定义为 FetchType.Lazy 的属性(对象或关联实体)。是这样的,
@JoinColumn(name = "inventory_item_oid", referencedColumnName = "inventory_item_oid")
@ManyToOne(fetch = FetchType.LAZY)
private InventoryItem inventoryItem;
因此,并非所有属性都已加载。当需要库存项目时,它会被调用。此调用引发 LazyInitialization 异常。
由于我的缓存值仅存在一天,因此可以在过期之前调用任意次数。
其中一个调用引发了上述异常。
我发现使用长休眠会话可以解决这个问题。但它不起作用,因为我的是基于请求/响应的应用程序。
还有另一种方法,我需要在访问其属性之前检查 InventoryItem 是否为空,如果为空,则我需要单独获取该值并将其附加到父项。这似乎很好......但需要大量工作,因为我有很多实体。
我想知道是否有任何其他方法可以获取那些定义为惰性的对象。
【问题讨论】:
标签: hibernate caching ehcache entities lazy-initialization