Hi Steve, in HHH-7160 we forgot to consider the 2nd-Level-Cache when removing the key from naturalIdToPkMap:
private static class NaturalIdResolutionCache implements Serializable { ... final CachedNaturalId initial = pkToNaturalIdMap.get( pk ); if ( initial != null ) { if ( areSame( naturalIdValues, initial.getValues() ) ) { return false; } naturalIdToPkMap.remove( initial ); // OK for first level-cache, // but if persister.hasNaturalIdCache() then CachedNaturalId must also be evicted from second level cache too The dilemma: non-static method evictNaturalIdResolution cannot be called here ( we are in a static context) I have already test-case which demonstrates the bug: session.bySimpleNaturalId(...).load(obsolete_key) resolves and returns object from 2nd-LevelCache How should I proceed? Should I open another issue for this? best regards Guenther -----Original Message----- From: Steve Ebersole (JIRA) [mailto:nore...@atlassian.com] Sent: Thursday, March 15, 2012 12:02 AM To: Demetz, Guenther Subject: [Hibernate-JIRA] Closed: (HHH-7160) Method NaturalIdXrefDelegate#cache() misses to remove obsolete entry in naturalIdToPkMap when NaturalId values changed [ https://hibernate.onjira.com/browse/HHH-7160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Steve Ebersole closed HHH-7160. ------------------------------- Resolution: Out of Date This was already addressed as part of another issue > Method NaturalIdXrefDelegate#cache() misses to remove obsolete entry > in naturalIdToPkMap when NaturalId values changed > ---------------------------------------------------------------------- > ------------------------------------------------ > > Key: HHH-7160 > URL: https://hibernate.onjira.com/browse/HHH-7160 > Project: Hibernate ORM > Issue Type: Bug > Components: core > Affects Versions: 4.1.1 > Environment: Hibernate4.1.1 > Reporter: Guenther Demetz > Labels: naturalId > Attachments: TestCaseNaturalIdChangeBetweenPersistAndFlush.jar > > Original Estimate: 1h > Remaining Estimate: 1h > > Method NaturalIdXrefDelegate#cache() misses to remove obsolete entry > in naturalIdToPkMap when NaturalId values changed, thus NaturalIdAccess > delivers results even by searching with obsolete values (see attached > Testcase). > Cause: > following instruction is missing in Method NaturalIdXrefDelegate#cache(): > if ( initial != null ) { > if ( areSame( naturalIdValues, initial.getValues()) ) { > return false; > } > naturalIdToPkMap.remove(initial); // <-- this instruciton is missing > } -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev