OpenJPA
  1. OpenJPA
  2. OPENJPA-207

failure when composite ID has another composite ID as a field

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 0.9.6
    • Fix Version/s: 2.0.0-M2
    • Component/s: None
    • Labels:
      None
    • Environment:
      derby
      jdk 1.5.0_07

      Description

      see attached test case: entities Library, Book, and Page. there is a one-many bidirectional relationship between Library and Book, and Book and Page. a Library's ID is simply it's name. a Book's ID is it's name, plus it's owning library's ID. A Page's ID is it's number, plus it's owning Book's ID.

      this arrangement results in composite IDs for Book and Page. and moreover, Page's composite ID, PageId, contains a page number field plus a BookId. however, this arrangement results in an exception at runtime w/ the included test case ...

      ...
      Caused by: java.lang.ClassCastException: org.apache.openjpa.util.ObjectId
      at com.mycompany.book.Page.pcCopyKeyFieldsToObjectId(Page.java)
      at org.apache.openjpa.util.ApplicationIds.create(ApplicationIds.java:383)
      at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2349)

      note that if i remove the bookId field from PageId, the test case succeeds.

      also note that this problem is also observed against a trunk field from march 3 (0.9.7 snapshot).

      1. book.zip
        33 kB
        Jeffrey Blattman

        Activity

        Hide
        Pinaki Poddar added a comment -

        The change incorporated includes a change in enhancer.
        The multiple-level of derived identity is handled in enhancer by proper casts.
        Runtime is modified to accommodate a user-defined identity class by wrapping it in OpenJPA wrapper identity type i.e. org.apache.openjpa.util.ObjectId.

        The attached test by the issue reporter is cannibalized (with due references) in OpenJPA test suite.

        Show
        Pinaki Poddar added a comment - The change incorporated includes a change in enhancer. The multiple-level of derived identity is handled in enhancer by proper casts. Runtime is modified to accommodate a user-defined identity class by wrapping it in OpenJPA wrapper identity type i.e. org.apache.openjpa.util.ObjectId. The attached test by the issue reporter is cannibalized (with due references) in OpenJPA test suite.
        Hide
        Jeffrey Blattman added a comment -

        to run the test case, please start a derby network server on localhost:1527.

        Show
        Jeffrey Blattman added a comment - to run the test case, please start a derby network server on localhost:1527.

          People

          • Assignee:
            Pinaki Poddar
            Reporter:
            Jeffrey Blattman
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development