OpenJPA
  1. OpenJPA
  2. OPENJPA-560

merge() throws NPE or unable to create proxy

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 1.1.0
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Environment:
      Linux 2.6, Java 1.5.0_12, Derby 10.3.2.1

      Description

      I have reduced this to a stand-alone unit test and also tested it against Toplink and Hibernate, with which it works.

      So I'm looking at a pure OpenJPA issue here.

      Here is the low-down:

      • Parent - child entities mapped using XML as opposed to annotations
      • both inherit a mapped superclass
      • both have a prepersist and preupdate listener configured
      • not using enhancement

      This is all I do:

      EntityManager entityManager =
      db.entityManagerFactory.createEntityManager();
      entityManager.getTransaction().begin();
      Genus genus = entityManager.find(Genus.class, new Long(1));
      entityManager.getTransaction().commit();
      entityManager.close();
      // now detached
      entityManager = db.entityManagerFactory.createEntityManager();
      entityManager.getTransaction().begin();
      entityManager.merge(genus);

      and it throws an exception. If there is a child row in the db, I get the exception below.

      If there is no child in existence, I get a NullPointerException.

      If I enhance the entities, all is hunkydory.

      This is using OpenJPA v1.1.0 snapshot from February.

      $Proxy13 seems to be the name of the parent's child collection property, I can see from debugging.

      <openjpa-1.1.0-SNAPSHOT-r420667:609825 fatal general error> org.apache.openjpa.persistence.PersistenceException: Unable to create a second class object proxy for final class "class $Proxy13".
      at org.apache.openjpa.util.ProxyManagerImpl.assertNotFinal(ProxyManagerImpl.java:555)
      at org.apache.openjpa.util.ProxyManagerImpl.generateProxyCollectionBytecode(ProxyManagerImpl.java:524)
      at org.apache.openjpa.util.ProxyManagerImpl.getFactoryProxyCollection(ProxyManagerImpl.java:373)
      at org.apache.openjpa.util.ProxyManagerImpl.copyCollection(ProxyManagerImpl.java:192)
      at org.apache.openjpa.kernel.AttachStrategy.copyCollection(AttachStrategy.java:342)
      at org.apache.openjpa.kernel.AttachStrategy.attachCollection(AttachStrategy.java:319)
      at org.apache.openjpa.kernel.AttachStrategy.replaceList(AttachStrategy.java:357)
      at org.apache.openjpa.kernel.AttachStrategy.attachField(AttachStrategy.java:222)
      at org.apache.openjpa.kernel.VersionAttachStrategy.attach(VersionAttachStrategy.java:151)
      at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:241)
      at org.apache.openjpa.kernel.AttachManager.attach(AttachManager.java:101)
      at org.apache.openjpa.kernel.BrokerImpl.attach(BrokerImpl.java:3196)
      at org.apache.openjpa.kernel.DelegatingBroker.attach(DelegatingBroker.java:1142)
      at org.apache.openjpa.persistence.EntityManagerImpl.merge(EntityManagerImpl.java:736)
      at org.permacode.atomictest.jpa.JpaSpeciesDao.persist(JpaSpeciesDao.java:81)

        Activity

        Adam Hardy made changes -
        Field Original Value New Value
        Attachment bug-jpa-merge.zip [ 12379665 ]
        Adam Hardy created issue -

          People

          • Assignee:
            Unassigned
            Reporter:
            Adam Hardy
          • Votes:
            2 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:

              Development