OpenJPA
  1. OpenJPA
  2. OPENJPA-2233

Failed to invoke pcGetIDOwningClass method on embeddable entity with ID annotation

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.0.1, 2.1.0, 2.2.0, 2.3.0
    • Fix Version/s: 2.0.3, 2.1.2, 2.2.2, 2.2.1.1, 2.3.1, 2.4.0
    • Component/s: Enhance
    • Labels:
      None
    • Patch Info:
      Patch Available

      Description

      It failed to invoke pcGetIDOwningClass method on an embeddable entity which has the ID annotation. here is the exception:

      java.lang.NoSuchMethodError: com/xxx/xxx/entity/MyClass.pcGetIDOwningClass()Ljava/lang/Class;
      at com.xxx.xxx.entity.MyClass.pcNewObjectIdInstance(MyClass.java)
      at org.apache.openjpa.enhance.PCRegistry.newObjectId(PCRegistry.java:137)
      at org.apache.openjpa.meta.MetaDataRepository.processRegisteredClass(MetaDataRepository.java:1661)
      at org.apache.openjpa.meta.MetaDataRepository.processRegisteredClasses(MetaDataRepository.java:1615)
      at org.apache.openjpa.meta.ClassMetaData.getPCSubclasses(ClassMetaData.java:365)
      at org.apache.openjpa.jdbc.meta.MappingRepository.findBaseClassMapping(MappingRepository.java:1510)
      at org.apache.openjpa.jdbc.meta.MappingRepository.prepareMapping(MappingRepository.java:403)
      at org.apache.openjpa.meta.MetaDataRepository.preMapping(MetaDataRepository.java:736)
      at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:625)
      at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal(MetaDataRepository.java:385)
      at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:358)
      at org.apache.openjpa.meta.MetaDataRepository.resolveAll(MetaDataRepository.java:1923)
      at org.apache.openjpa.meta.MetaDataRepository.getQueryMetaDataInternal(MetaDataRepository.java:1901)
      at org.apache.openjpa.meta.MetaDataRepository.getQueryMetaData(MetaDataRepository.java:1888)
      at org.apache.openjpa.persistence.EntityManagerImpl.createNamedQuery(EntityManagerImpl.java:1013)

      This is because it uses different condition to add and invoke pcNewObjectIdInstance method in PCEnhancer.

      here is the section it adds pcNewObjectIdInstance in PCEnhancer.addPCMethods

      if (_meta.hasAbstractPKField() == true)

      { addGetIDOwningClass(); }

      here is the section it invokes pcNewObjectIdInstance in PCEnhancer.addNewObjectIdInstanceMethod

      if(_meta.isEmbeddedOnly() || _meta.hasAbstractPKField() == true)

      { code.aload().setThis(); code.invokevirtual().setMethod(PRE + "GetIDOwningClass", Class.class, null); }

      else

      { code.classconstant().setClass(getType(_meta)); }

        Issue Links

          Activity

          Hide
          Rick Curtis added a comment -

          Merged changes to 2.3.x and trunk.

          Show
          Rick Curtis added a comment - Merged changes to 2.3.x and trunk.
          Hide
          ASF subversion and git services added a comment -

          Commit 1551447 from Rick Curtis in branch 'openjpa/branches/2.3.x'
          [ https://svn.apache.org/r1551447 ]

          OPENJPA-2233: Merge changes from trunk.

          Show
          ASF subversion and git services added a comment - Commit 1551447 from Rick Curtis in branch 'openjpa/branches/2.3.x' [ https://svn.apache.org/r1551447 ] OPENJPA-2233 : Merge changes from trunk.
          Hide
          ASF subversion and git services added a comment -

          Commit 1551446 from Rick Curtis in branch 'openjpa/trunk'
          [ https://svn.apache.org/r1551446 ]

          OPENJPA-2233: Merge changes to trunk.

          Show
          ASF subversion and git services added a comment - Commit 1551446 from Rick Curtis in branch 'openjpa/trunk' [ https://svn.apache.org/r1551446 ] OPENJPA-2233 : Merge changes to trunk.
          Hide
          Rick Curtis added a comment -

          Reopening to merge changes to trunk and to 2.3.x.

          Show
          Rick Curtis added a comment - Reopening to merge changes to trunk and to 2.3.x.
          Hide
          Jody Grassel added a comment -

          Checking fix into SVN on Helen's behalf. Thanks, Helen!

          Show
          Jody Grassel added a comment - Checking fix into SVN on Helen's behalf. Thanks, Helen!
          Hide
          Helen Xu added a comment -

          double checked the persistence spec, the Identity field is not supported in embeddable entity.

          Changed the code to check that condition before invoke pcGetIDOwningClass. Log the user error as well.

          Show
          Helen Xu added a comment - double checked the persistence spec, the Identity field is not supported in embeddable entity. Changed the code to check that condition before invoke pcGetIDOwningClass. Log the user error as well.
          Hide
          Helen Xu added a comment -

          attached fix and uni ttest

          Show
          Helen Xu added a comment - attached fix and uni ttest

            People

            • Assignee:
              Rick Curtis
              Reporter:
              Helen Xu
            • Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development