Uploaded image for project: 'JDO'
  1. JDO
  2. JDO-669

TCK : RelationshipManyToManyAllRelationships.testDeleteFromMappedSide - problem with check

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • JDO 3 (3.0)
    • JDO 3.1-rc1
    • tck
    • None

    Description

      Whilst this test passes with current DataNucleus (2.2 M3), 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 ?

      Attachments

        1. jdo-669.patch
          7 kB
          Craig L Russell

        Activity

          People

            clr Craig L Russell
            andyj Andy Jefferson
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: