我使用条件API进行以下查询:
1
ICriteria criteria = _session.CreateCriteria<Country>();
criteria.Add(Restrictions.Like("Code", "%C%"));
IList<Country> countryList = criteria.List<Country>();
2
ICriteria criteria = _session.CreateCriteria<Facility>();
criteria.Add(Restrictions.Like("Visible", true));
IList<Facility> facilityList = criteria.List<Facility>();
在第二次查询之后,我的会话变脏了,而在第一次查询之后却没有。我的Country
实体只有简单属性,Facility
也有多对一和一对多。
你能告诉我为什么会话变脏了吗?
答案 0 :(得分:0)
假设您的第二个查询返回一个Facility
对象f1
,其EntityKey为k1
。它变脏的原因是:在第二次查询之前,同一Session
已经拥有Facility
对象f2
,其EntityKey与k1
相同!虽然f1
和f2
之间存在一些不同的属性。在第二次查询期间,执行查询使会话执行脏检查,因此会话被视为&#34;脏&#34;。
如何调试?您可以输出当前会话在 第二次查询之前持有 的所有对象(类似Set<EntityKey> set = session.getStatistics().getEntityKeys();
,参考Hibernate session.contains( Class clazz, Serializable id ),@ TheReincarnator的答案),我认为你应该找到至少一个Facility
。然后你可以调试Facility
是否与第二个查询得到的相同(它应该是不同的!)。