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

Reply via email to