You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Petrus Viljoen (JIRA)" <ji...@apache.org> on 2012/11/30 19:09:58 UTC
[jira] [Commented] (OPENJPA-673) Entity using Generated Value for
primary key and a Version field and no DetachedStae fails to merge
[ https://issues.apache.org/jira/browse/OPENJPA-673?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13507510#comment-13507510 ]
Petrus Viljoen commented on OPENJPA-673:
----------------------------------------
This issue still persists in version 2.2.1 , unlike Vermeulen's comment of 25/Jan/11 14:48 , My version field And ID is populated in the database.
Basic flow of the cose
command = new xxxCommand();
// ... setup instance
em.persist(Command);
em.flush(); // We must Flush to get the correct ID for the command, it is autogenerated
em.refresh(command); // We refresh for justin's sake
command.setClientTransactionID(command.generateTransactionIdentifier()); // populate the TransactionID , THIS USES THE command's ID te generate a unique String.
... generate xml request
self.processCommandSetRequest(command,requestXml) // In a new TransactionContext to ensure data is commited to store
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public <F extends AbstractEppCommand> F processCommandSetRequest(final F command, final String request_xml) {
// Accessing the ID propery BEFORE the merge is ok, ID and Version is populated and correct.
final F command_ = eManager.merge(command);
// Accessing the ID property After the Merge will cause the exception
command_.setRequestXML(request_xml);
// IF you did not access the ID property it will now cause the exception during flush , if you don't explicitly flush, the container gets runtime exception during transaction commit
eManager.flush();
eManager.detach(command_);
return command_;
}
[code]
Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: Primary key field com.bluedigital.ejb.epp.DomainCheckCommand.domainCheckCommandID of com.bluedigital.ejb.epp.DomainCheckCommand@1ef5a718 has non-default value. The instance life cycle is in PNewState 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:762)
at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:135)
at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:600)
at org.apache.openjpa.kernel.StateManagerImpl.assignField(StateManagerImpl.java:691)
at org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1660)
at org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1591)
at com.bluedigital.ejb.epp.DomainCheckCommand.pcGetdomainCheckCommandID(DomainCheckCommand.java)
at com.bluedigital.ejb.epp.DomainCheckCommand.getId(DomainCheckCommand.java:53)
at com.bluedigital.ejb.logic.RegistryTransportManager.processCommandSetRequest(RegistryTransportManager.java:677)
[code]
> 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