OpenJPA
  1. OpenJPA
  2. OPENJPA-2443

InvalidStateException while merging a new Entity with a GeneratedValue id

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.3.0, 2.4.0
    • Fix Version/s: 2.3.0, 2.4.0
    • Component/s: kernel
    • Labels:
      None

      Description

      This problem only happens if you have an Entity with a Generated id that also has the annotation @Basic(optional = false). If you create a new Entity and then try to persist it via EntityManager.merge(...) call, you'll get the following stack :

      <openjpa-0.0.0-rnull fatal user error> org.apache.openjpa.persistence.InvalidStateException: The field "id" of instance "org.apache.openjpa.persistence.jdbc.auto.AutoIncrementEntity@99883308" contained a null value; the metadata for this field specifies that nulls are illegal.
      at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:567)
      at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:511)
      at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:3019)
      at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:44)
      at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1035)
      at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2141)
      at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2101)
      at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1872)
      at org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:1045)
      at org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:663)

        Activity

        Hide
        Rick Curtis added a comment -

        Attaching a unit test and a test-fix.

        The net of this change is that in pre-flush, don't check to see if a field is null if is a GenerationType.IDENTITY field as the value will get populated later in the flush processing.

        Show
        Rick Curtis added a comment - Attaching a unit test and a test-fix. The net of this change is that in pre-flush, don't check to see if a field is null if is a GenerationType.IDENTITY field as the value will get populated later in the flush processing.
        Hide
        ASF subversion and git services added a comment -

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

        OPENJPA-2443 : Fix SingleFieldManager to not check for null values for IDENTITY generated fields when flushing.

        Show
        ASF subversion and git services added a comment - Commit 1535067 from Rick Curtis in branch 'openjpa/trunk' [ https://svn.apache.org/r1535067 ] OPENJPA-2443 : Fix SingleFieldManager to not check for null values for IDENTITY generated fields when flushing.
        Hide
        ASF subversion and git services added a comment -

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

        OPENJPA-2443 : Remove unnecessary import.

        Show
        ASF subversion and git services added a comment - Commit 1535082 from Rick Curtis in branch 'openjpa/trunk' [ https://svn.apache.org/r1535082 ] OPENJPA-2443 : Remove unnecessary import.
        Hide
        Mark Struberg added a comment -

        Rick, if you like then you might also apply this to the 2.3.x branch. Seems save for me to do so.

        Show
        Mark Struberg added a comment - Rick, if you like then you might also apply this to the 2.3.x branch. Seems save for me to do so.
        Hide
        ASF subversion and git services added a comment -

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

        OPENJPA-2443 : Fix SingleFieldManager to not check for null values for IDENTITY generated fields when flushing.

        Show
        ASF subversion and git services added a comment - Commit 1535379 from Rick Curtis in branch 'openjpa/branches/2.3.x' [ https://svn.apache.org/r1535379 ] OPENJPA-2443 : Fix SingleFieldManager to not check for null values for IDENTITY generated fields when flushing.
        Hide
        Rick Curtis added a comment -

        I merged the changes back to 2.3.x.

        Show
        Rick Curtis added a comment - I merged the changes back to 2.3.x.

          People

          • Assignee:
            Rick Curtis
            Reporter:
            Rick Curtis
          • Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development