NHibernate 按类型和 ID 从一级缓存中逐出
本文关键字:一级缓存 ID 类型 NHibernate | 更新日期: 2023-09-27 18:35:06
我有一个名为 Car 的 Nhibernate 对象,这个 Car 对象有一个名为 Doors 的 PersietentBag IList 集合,全部处于延迟加载状态。
如果我这样做(在会话 1 中)
int singleDoor = Car.Doors[0];
Lazyest 集合从 db 加载,相关对象被添加到第一级缓存中,i 将在 1rst 级缓存中具有从 db 加载的 N 个对象 Car 和 N 个门。
从另一只手(在会话 2 中的代码的另一部分)我加载相同的 Car 对象并执行相同的配置。
int singleDoor = Car,Doors[0];
我从SESSION2驱逐汽车和所有门对象
我修改了此对象的状态,并希望将 doscontected 对象附加到SESSION1以保存 nd do
mySession.Update(Car);
但是当我尝试更新 Door(s) obejcts 时,显然我抛出了(另一个具有相同 id 等的 obejct)异常,因为还有另一个具有相同 id 的对象。
机器人很难找到要逐出的旧对象,我如何 EVICT 旧对象或清除 1rst 级缓存(仅按类型和 id)或从缓存中丢弃旧对象并更新我想要的内容?
提前谢谢。
这不是因为二级缓存,而是因为您尝试在会话 2 中加载实体时将其保存在会话 1 中(实际上,是第一级缓存导致了这种情况)。
您的问题的答案是使用(在会话 1 中)会话。Evict(car),但这并不是最好的方法 - 我宁愿建议使用会话。Merge(car) 它将更新会话 1 中的持久对象,而不会抛出有关具有相同 id 的另一个对象的异常。