Atul Kshirsagar created OPENJPA-2522:
----------------------------------------

             Summary: With L2 Cache turned ON newly persisted entity on inverse 
side of relation doesn't have FK populated on 'find'/'query' 
                 Key: OPENJPA-2522
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2522
             Project: OpenJPA
          Issue Type: Bug
          Components: datacache, jpa
    Affects Versions: 2.3.0, 2.2.2
         Environment: apache karaf 2.3.0, openjpa 2.2.2
            Reporter: Atul Kshirsagar


With l2 cache turned on (by setting "openjpa.DataCache" property to "true" in 
persistence.xml) we observed following behavior:

Lets say we have model Person <-> Address(LAZY, owner). We create a new 
instance of Person and Address. Since Person is non-owing side of relation, we 
set Person instance in Address but don't set Address instance in Person. We 
then persist both Person and Address instance. Later when we query Person 
entity by using EntityManager.find method the returned instance of Person 
doesn't have Address field set. This field doesn't get set even if we query 
Address entity. 

It appears that Person entity that was created when we persisted it gets cached 
and it doesn't get refreshed when we query for that instance.

I have looked at defect https://issues.apache.org/jira/browse/OPENJPA-2285 and 
applied that fix to open jpa 2.2.2 but I still see the same behavior. I did 
some debugging and found that PCDataImpl.isLoaded method always returns true 
for the 'address' field and hence it looks up in its internal "_data" object 
array for value, which has null. In effect the check of the loadedFieldsAfter 
and loadedFieldsBefore introduced in OPENJPA-2285 doesn't trigger and cache is 
never updated.

I have verified that this is indeed a cache problem by evicting the "Person" 
class from datacache (using EntityManagerFactory.getCache().evict(Person.class) 
method) and making sure that further queries for that Person instance returns 
address when we try to access that field. 



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to