db-jdo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andy Jefferson <a...@datanucleus.org>
Subject TCK : RelationshipManyToManyAllRelationships.testDeleteFromMappedSide
Date Fri, 19 Nov 2010 14:54:32 GMT
Hi,

whilst this test passes with current DataNucleus, I was in the process of 
extending its support for managed relationships, and now get this test to fail 
which provokes this question :-

pm.deletePersistent(proj1);
pm.flush();
deferredAssertTrue(!emp1.getProjects().contains(proj1),
    ASSERTION_FAILED + testMethod,
    "Postcondition is false; "
    + "other side of relationship not set on flush");

After the call to deletePersistent() and flush() the object "proj1" is in 
P_DELETED state. So when the call goes in to emp1.getProjects().contains(proj) 
this will interrogate the hashCode() method of Project. This is defined as
public int hashCode() {
    return (int)projid;
}

But when using datastore identity "projid" is *not* a primary-key field, and 
so, as per section 5.5.6 of the spec 
<spec>Read access to primary key fields is permitted. Any other access to 
persistent fields is not supported and might throw a JDOUserException.</spec>
So what does the implementation do ?


Comments ?

-- 
Andy
DataNucleus (http://www.datanucleus.org)

Mime
View raw message