[ 
https://issues.apache.org/jira/browse/JDO-628?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andy Jefferson resolved JDO-628.
--------------------------------

    Resolution: Fixed

SVN trunk now has the updated check for containment

> TCK "Relationship1ToManyAllRelationships.testDeleteFromMappedSide" change to 
> use iterator for contains check
> ------------------------------------------------------------------------------------------------------------
>
>                 Key: JDO-628
>                 URL: https://issues.apache.org/jira/browse/JDO-628
>             Project: JDO
>          Issue Type: Bug
>          Components: tck2
>    Affects Versions: JDO 2 maintenance release 2
>            Reporter: Andy Jefferson
>            Assignee: Andy Jefferson
>             Fix For: JDO 2 maintenance release 3
>
>
> During the course of improving DataNucleus handling of managed relations I 
> have come across a problem with the above TCK test. We have a 1-N relation 
> and delete an element via deletePersistent. This is then to remove the 
> element from the collection. After the deletePersistent() and flush() it 
> tries to check collection.contains() with the deleted element. Internally we 
> use a HashSet for that collection and so there is use of hashcodes. This 
> (after my changes to DataNucleus) results in
> FailedObject:4636[OID]org.apache.jdo.tck.pc.company.FullTimeEmployee
>     [java]      at 
> org.datanucleus.jdo.state.PersistentDeleted.transitionReadField(PersistentDeleted.java:115)
>     [java]      at 
> org.datanucleus.state.AbstractStateManager.transitionReadField(AbstractStateManager.java:546)
>     [java]      at 
> org.datanucleus.state.JDOStateManagerImpl.isLoaded(JDOStateManagerImpl.java:1872)
>     [java]      at 
> org.apache.jdo.tck.pc.company.Person.jdoGetpersonid(Person.java)
>     [java]      at 
> org.apache.jdo.tck.pc.company.Person.hashCode(Person.java:359)
>     [java]      at java.util.HashMap.getEntry(HashMap.java:344)
>     [java]      at java.util.HashMap.containsKey(HashMap.java:335)
>     [java]      at java.util.HashSet.contains(HashSet.java:184)
>     [java]      at org.datanucleus.sco.backed.Set.contains(Set.java:469)
>     [java]      at 
> java.util.Collections$UnmodifiableCollection.contains(Collections.java:1000)
>     [java]      at 
> org.apache.jdo.tck.mapping.Relationship1ToManyAllRelationships.testDeleteFromMappedSide(Relationship1ToManyAllRelationships.java:421)
> so it tries to find the position of this (deleted) object in the HashSet and 
> tries to work out the hashcode of the deleted object ... hence provoking an 
> attempt to load the person id (since Person defines hashCode() as that). But 
> the element is deleted hence the exception. If I manually inspect the 
> Collection of elements using an iterator and do a comparison via 
> JDOHelper.getObjectId() with the deleted object this should pass since the 
> deleted object isn't present.
> The TCK test (and any others that result in an object in P_DELETED state) 
> should be changed to use iterator() and comparison with the object "id" for 
> contains. This then removes the problem with use of hashCode()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to