You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Sreedhar S <sr...@gmail.com> on 2007/07/03 14:07:41 UTC

EntityExistsException While updating

Hi,

While updating using openJPA I get the following exception. What does
An object of type with oid already exists? Is it trying to update the
table in RoleDTO?? But in RoleDTO, I specified
@Column(name = "ROLE_ID", insertable=false, updatable = false)
@Column(name = "ROLE_NAME", insertable=false, updatable = false)

Kindly help

Caused by:
<0.9.7-incubating nonfatal store error>
org.apache.openjpa.persistence.EntityExistsException: An object of
type "com.server.dao.user.RoleDTO" with oid
"com.server.dao.user.RoleDTO-5" already exists in this context;
another cannot be persisted.
FailedObject: com.vormetric.server.dao.user.RoleDTO@298c298c
	at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2397)
	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(SingleFieldManager.java:757)
	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPCs(SingleFieldManager.java:732)
	at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:634)
	at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:559)
	at org.apache.openjpa.kernel.SingleFieldManager.preFlush(SingleFieldManager.java:475)
	at org.apache.openjpa.kernel.StateManagerImpl.preFlush(StateManagerImpl.java:2678)
	at org.apache.openjpa.kernel.PDirtyState.beforeFlush(PDirtyState.java:37)
	at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(StateManagerImpl.java:854)
	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1903)
	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1863)
	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1781)
	at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1491)
	at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1110)
	at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)

Re: EntityExistsException While updating

Posted by Craig L Russell <Cr...@Sun.COM>.
This error occurs during commit, which causes a flush, which looks  
for cascade persist fields of dirty objects, which is where the  
duplicate is found.

Is it possible that the application assigned a detached instance into  
a cascade persist field and independently put the persistent instance  
into the cache via merge?

Craig

On Jul 3, 2007, at 10:09 AM, Marc Prud'hommeaux wrote:

> Sreedhar-
>
> It sounds like OpenJPA thinks that are are trying to call em.persist 
> () on an instance of RoleDTO with id #5, but one has already been  
> persisted. Is this possible?
>
>
>
> On Jul 3, 2007, at 5:07 AM, Sreedhar S wrote:
>
>> Hi,
>>
>> While updating using openJPA I get the following exception. What does
>> An object of type with oid already exists? Is it trying to update the
>> table in RoleDTO?? But in RoleDTO, I specified
>> @Column(name = "ROLE_ID", insertable=false, updatable = false)
>> @Column(name = "ROLE_NAME", insertable=false, updatable = false)
>>
>> Kindly help
>>
>> Caused by:
>> <0.9.7-incubating nonfatal store error>
>> org.apache.openjpa.persistence.EntityExistsException: An object of
>> type "com.server.dao.user.RoleDTO" with oid
>> "com.server.dao.user.RoleDTO-5" already exists in this context;
>> another cannot be persisted.
>> FailedObject: com.vormetric.server.dao.user.RoleDTO@298c298c
>> 	at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java: 
>> 2397)
>> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC 
>> (SingleFieldManager.java:757)
>> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPCs 
>> (SingleFieldManager.java:732)
>> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
>> (SingleFieldManager.java:634)
>> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
>> (SingleFieldManager.java:559)
>> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
>> (SingleFieldManager.java:475)
>> 	at org.apache.openjpa.kernel.StateManagerImpl.preFlush 
>> (StateManagerImpl.java:2678)
>> 	at org.apache.openjpa.kernel.PDirtyState.beforeFlush 
>> (PDirtyState.java:37)
>> 	at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush 
>> (StateManagerImpl.java:854)
>> 	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1903)
>> 	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java: 
>> 1863)
>> 	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion 
>> (BrokerImpl.java:1781)
>> 	at org.jboss.tm.TransactionImpl.doBeforeCompletion 
>> (TransactionImpl.java:1491)
>> 	at org.jboss.tm.TransactionImpl.beforePrepare 
>> (TransactionImpl.java:1110)
>> 	at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)
>

Craig Russell
Architect, Sun Java Enterprise System http://java.sun.com/products/jdo
408 276-5638 mailto:Craig.Russell@sun.com
P.S. A good JDO? O, Gasp!


Re: EntityExistsException While updating

Posted by Marc Prud'hommeaux <mp...@apache.org>.
Sreedhar-

It sounds like OpenJPA thinks that are are trying to call em.persist 
() on an instance of RoleDTO with id #5, but one has already been  
persisted. Is this possible?



On Jul 3, 2007, at 5:07 AM, Sreedhar S wrote:

> Hi,
>
> While updating using openJPA I get the following exception. What does
> An object of type with oid already exists? Is it trying to update the
> table in RoleDTO?? But in RoleDTO, I specified
> @Column(name = "ROLE_ID", insertable=false, updatable = false)
> @Column(name = "ROLE_NAME", insertable=false, updatable = false)
>
> Kindly help
>
> Caused by:
> <0.9.7-incubating nonfatal store error>
> org.apache.openjpa.persistence.EntityExistsException: An object of
> type "com.server.dao.user.RoleDTO" with oid
> "com.server.dao.user.RoleDTO-5" already exists in this context;
> another cannot be persisted.
> FailedObject: com.vormetric.server.dao.user.RoleDTO@298c298c
> 	at org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2397)
> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC 
> (SingleFieldManager.java:757)
> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlushPCs 
> (SingleFieldManager.java:732)
> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
> (SingleFieldManager.java:634)
> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
> (SingleFieldManager.java:559)
> 	at org.apache.openjpa.kernel.SingleFieldManager.preFlush 
> (SingleFieldManager.java:475)
> 	at org.apache.openjpa.kernel.StateManagerImpl.preFlush 
> (StateManagerImpl.java:2678)
> 	at org.apache.openjpa.kernel.PDirtyState.beforeFlush 
> (PDirtyState.java:37)
> 	at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush 
> (StateManagerImpl.java:854)
> 	at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1903)
> 	at org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java: 
> 1863)
> 	at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion 
> (BrokerImpl.java:1781)
> 	at org.jboss.tm.TransactionImpl.doBeforeCompletion 
> (TransactionImpl.java:1491)
> 	at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java: 
> 1110)
> 	at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:324)