1

基準 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>();   

2 番目のクエリの後、私のセッションはダーティになりますが、1 番目のクエリの後はそうではありません。私のCountryエンティティには単純なプロパティしかなく、Facility多対 1 と 1 対多もあります。

セッションが汚れる理由を教えてください。

4

1 に答える 1

0

2 番目のクエリが 1 つのFacilityobjectf1を返し、そのEntityKeyがであるとしk1ます。汚れる理由は次のとおりです。2番目のクエリの前に、同じオブジェクトがSession既に保持されており、そのEntityKeyは ! と同じです と の間でいくつかの属性が異なりますが。2 番目のクエリ中に、クエリを実行するとセッションがダーティ チェックを実行するため、セッションは「ダーティ」と見なされます。Facilityf2k1f1f2

これをデバッグする方法は?2番目のクエリの前に現在のセッションが保持するすべてのオブジェクトを出力できます( Hibernate session.contains( Class clazz, Serializable id )Set<EntityKey> set = session.getStatistics().getEntityKeys(); 、@TheReincarnatorの答えを参照してください)、少なくとも1つを見つける必要があると思います。次に、その 1 つの 2 番目のクエリ get と同じかどうかをデバッグできます (異なるはずです!)。FacilityFacility

于 2016-05-25T15:19:26.493 に答える