[
https://issues.apache.org/jira/browse/OPENJPA-2443?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rick Curtis updated OPENJPA-2443:
---------------------------------
Attachment: OPENJPA-2443.patch
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.
> InvalidStateException while merging a new Entity with a GeneratedValue id
> -------------------------------------------------------------------------
>
> Key: OPENJPA-2443
> URL: https://issues.apache.org/jira/browse/OPENJPA-2443
> Project: OpenJPA
> Issue Type: Bug
> Components: kernel
> Affects Versions: 2.3.0, 2.4.0
> Reporter: Rick Curtis
> Assignee: Rick Curtis
> Attachments: OPENJPA-2443.patch
>
>
> 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)
--
This message was sent by Atlassian JIRA
(v6.1#6144)