[ 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)