You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Pinaki Poddar (JIRA)" <ji...@apache.org> on 2008/08/05 00:44:44 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=12619733#action_12619733 ] 

Pinaki Poddar commented on OPENJPA-673:
---------------------------------------

Following simple Test
===========================================================
	public void testSimpleMerge() {
		EntityManager em1 = emf.createEntityManager();
		em1.getTransaction().begin();
		PObject pc = new PObject();
		pc.setData("Persist NEW");
		em1.persist(pc);
		em1.getTransaction().commit();
		
		EntityManager em2 = emf.createEntityManager();
		em2.getTransaction().begin();
		pc.setData("Modified");
		em2.merge(pc);
		em2.getTransaction().commit();
	}
========================================================
with a Simple entity
========================================================
@Entity
public class PObject {
	@Id
	@GeneratedValue
	private long id;
	
	private String data;
	
	@Version
	private int version;
}
==================================================

fails with 
<openjpa-1.3.0-SNAPSHOT-r422266:681977M nonfatal user error> org.apache.openjpa.persistence.InvalidStateException: The generated value processing detected an existing value assigned to this field: jiraXXX.PObject.id.  This existing value was either provided via an initializer or by calling the setter method.  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:483)
	at org.apache.openjpa.util.ApplicationIds.assign(ApplicationIds.java:463)
	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.assignObjectId(JDBCStoreManager.java:682)
	at org.apache.openjpa.kernel.DelegatingStoreManager.assignObjectId(DelegatingStoreManager.java:134)
	at org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:519)
	at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2823)
	at org.apache.openjpa.kernel.PNewState.beforeFlush(PNewState.java:39)
	at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:959)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1948)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1826)
	at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:81)
	at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1350)
	at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:877)
	at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:512)
	at jiraXXX.TestMerge.testSimpleMerge(TestMerge.java:24)
	

"Making simple things easy, and difficult things possible" -- a sign of good design

> 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
>             Fix For: 1.2.0
>
>
> 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.
-
You can reply to this email to add a comment to the issue online.