[
https://issues.apache.org/jira/browse/OPENJPA-673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13680954#comment-13680954
]
Gurkan Erdogdu commented on OPENJPA-673:
----------------------------------------
Hello Kevin
Issue is that
- Persist a new entity in a new transaction. Entity name is : Address
- Merge a new entity which includes List<Address> in a new transaction. It
throws the exception as :
I tried all 2.x.x versions, all of them are failed! (I said that 2.1.1 works
but this is my fault, it does not work!)
Jun 11, 2013 11:55:53 AM
org.apache.geronimo.transaction.manager.TransactionImpl beforeCompletion
WARNING: Unexpected exception from beforeCompletion; transaction will roll back
<openjpa-2.1.1-r422266:1148538 nonfatal user error>
org.apache.openjpa.persistence.InvalidStateException: Primary key field
tr.com.mechsoft.efatura.web.jpa.SentInvoice.id of
tr.com.mechsoft.efatura.web.jpa.SentInvoice@b236ac has non-default value. The
instance life cycle is in PNewProvisionalState state and hence an existing
non-default value for the identity field is not permitted. You either need to
remove the @GeneratedValue annotation or modify the code to remove the
initializer processing.
at
org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:489)
at
org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:469)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:769)
at
org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135)
at
org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:605)
at
org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2966)
at
org.apache.openjpa.kernel.PNewProvisionalState.nonprovisional(PNewProvisionalState.java:45)
at
org.apache.openjpa.kernel.StateManagerImpl.nonprovisional(StateManagerImpl.java:1222)
at
org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:806)
at
org.apache.openjpa.kernel.SingleFieldManager.preFlushPCs(SingleFieldManager.java:751)
at
org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:653)
at
org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:578)
at
org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:494)
at
org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2971)
at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:40)
at
org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:1047)
at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2096)
at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:2056)
at
org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1974)
at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:527)
at
org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:512)
at
org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:413)
at
org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:262)
at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:252)
at
org.apache.openejb.core.transaction.JtaTransactionPolicy.completeTransaction(JtaTransactionPolicy.java:328)
at
org.apache.openejb.core.transaction.TxRequired.commit(TxRequired.java:75)
at
org.apache.openejb.core.transaction.EjbTransactionUtil.afterInvoke(EjbTransactionUtil.java:76)
at
org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:259)
at
org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:191)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:246)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:241)
at
org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:83)
at
org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:279)
Code example:
@Stateless class PersoneController{
//JTA based entity manager
@PersistenceContext EntityManager em;
//Person is a new object
public void merge(Person person){
em.merge(person);
}
}
class Client{
public void main(){
//Address is already in database
Address address = EntityManager.find(Address.class,1);
Person p = new Person();
p.getAddresses.add(address);
PersonController.merge(p);
}
}
> Entity using Generated Value for primary key and a Version field and no
> DetachedStae fails to merge
> ----------------------------------------------------------------------------------------------------
>
> Key: OPENJPA-673
> URL: https://issues.apache.org/jira/browse/OPENJPA-673
> Project: OpenJPA
> Issue Type: Bug
> Reporter: Pinaki Poddar
>
> Entities using GeneratedValue for primary key, a version field an dno
> detached state fails to merge.
> The issue lies with identifying :"what makes a new instance?"
> It is not obvious why VersionAttachStrategy does not use version field to
> detect newness. Instead it depends on detached state which is obviously null
> for instances not using a Detached State.
> Can someone shade some light on why VersionAttachStrategy ignores version
> field to detect newness?
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira