You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Krishnaprasad Subbarao <kr...@in.ibm.com> on 2013/02/18 20:27:32 UTC

Error in EntityManager.persist () if the database already contains a row with id=0

Hello,

Following error occurs while I am trying to persist a record. The id field 
has  been assigned a default value (0) as per the guidelines.

<openjpa-2.2.1-r422266:1396819 fatal store error> 
org.apache.openjpa.persistence.RollbackException: An object of type 
"com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in 
this context; another cannot be persisted.
FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
        at org.apache.openjpa.persistence.EntityManagerImpl.commit(
EntityManagerImpl.java:594)
        at com.ibm.test.jpa.JPAAddEntityTest.main(JPAAddEntityTest.java:38
)
Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal store error> 
org.apache.openjpa.persistence.EntityExistsException: An object of type 
"com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in 
this context; another cannot be persisted.
FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
        at org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(
BrokerImpl.java:5080)
        at org.apache.openjpa.kernel.BrokerImpl.persistInternal(
BrokerImpl.java:2653)
        at org.apache.openjpa.kernel.BrokerImpl.persist(
BrokerImpl.java:2573)
        at org.apache.openjpa.kernel.BrokerImpl.persist(
BrokerImpl.java:2556)
        at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(
SingleFieldManager.java:800)
        at org.apache.openjpa.kernel.SingleFieldManager.preFlush(
SingleFieldManager.java:621)
        at org.apache.openjpa.kernel.SingleFieldManager.preFlush(
SingleFieldManager.java:589)
        at org.apache.openjpa.kernel.SingleFieldManager.preFlush(
SingleFieldManager.java:505)
        at org.apache.openjpa.kernel.StateManagerImpl.preFlush(
StateManagerImpl.java:3028)
        at org.apache.openjpa.kernel.PNewState.beforeFlush(
PNewState.java:44)
        at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(
StateManagerImpl.java:1042)
        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2114
)
        at org.apache.openjpa.kernel.BrokerImpl.flushSafe(
BrokerImpl.java:2074)
        at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(
BrokerImpl.java:1992)
        at org.apache.openjpa.kernel.LocalManagedRuntime.commit(
LocalManagedRuntime.java:81)
        at org.apache.openjpa.kernel.BrokerImpl.commit(
BrokerImpl.java:1516)
        at org.apache.openjpa.kernel.DelegatingBroker.commit(
DelegatingBroker.java:933)
        at org.apache.openjpa.persistence.EntityManagerImpl.commit(
EntityManagerImpl.java:570)
        ... 1 more

The reason for this issue I found is, if the database which this object 
being persisted, contains a row with primary key as 0, then adding new 
record fails. Seems a duplicate primary key check is done when default 
value (0) is assigned to the id attribute of type primitive long. A record 
with Primary Key value = 0 already exists, so duplicate primary key check 
fails.

This zip file contains a sample code with which I was able to reproduce 
this error.

Adding a row with id=0 before persisting any object throws the error 
mentioned above.

I request all to help in resolving this issue. The id 0 has been in use 
for many days using hibernate. Hence we would like not to change this row 
in the database.

Also would like to know if there is any config parameter to change the 
default value of the id from 0 to any other value.



Thanks and Regards,

KRISHNAPRASAD SUBBARAO
Software Developer, Cloud Platform (BSS), Industry Solutions, India 
Software Lab





Fwd: Error in EntityManager.persist () if the database already contains a row with id=0

Posted by Kevin Sutter <kw...@gmail.com>.
Forgot the users mailing list on this suggestion...

---------- Forwarded message ----------
From: Albert Lee <al...@gmail.com>
Date: Mon, Feb 18, 2013 at 2:06 PM
Subject: Re: Error in EntityManager.persist () if the database already
contains a row with id=0
To: dev@openjpa.apache.org


Check this out:

http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#jpa_overview_mapping_sequence

sequence-generator has attribute "int initialValue: The initial sequence
value."

Albert

On Mon, Feb 18, 2013 at 1:27 PM, Krishnaprasad Subbarao <
krishnaprasads@in.ibm.com> wrote:

> Hello,
>
> Following error occurs while I am trying to persist a record. The id field
> has  been assigned a default value (0) as per the guidelines.
>
> <openjpa-2.2.1-r422266:1396819 fatal store error> *
> org.apache.openjpa.persistence.RollbackException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:594*)
>         at com.ibm.test.jpa.JPAAddEntityTest.main(*
> JPAAddEntityTest.java:38*)
> Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal store error> *
> org.apache.openjpa.persistence.EntityExistsException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(*
> BrokerImpl.java:5080*)
>         at org.apache.openjpa.kernel.BrokerImpl.persistInternal(*
> BrokerImpl.java:2653*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2573*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2556*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(*
> SingleFieldManager.java:800*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:621*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:589*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:505*)
>         at org.apache.openjpa.kernel.StateManagerImpl.preFlush(*
> StateManagerImpl.java:3028*)
>         at org.apache.openjpa.kernel.PNewState.beforeFlush(*
> PNewState.java:44*)
>         at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(*
> StateManagerImpl.java:1042*)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(*
> BrokerImpl.java:2114*)
>         at org.apache.openjpa.kernel.BrokerImpl.flushSafe(*
> BrokerImpl.java:2074*)
>         at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(*
> BrokerImpl.java:1992*)
>         at org.apache.openjpa.kernel.LocalManagedRuntime.commit(*
> LocalManagedRuntime.java:81*)
>         at org.apache.openjpa.kernel.BrokerImpl.commit(*
> BrokerImpl.java:1516*)
>         at org.apache.openjpa.kernel.DelegatingBroker.commit(*
> DelegatingBroker.java:933*)
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:570*)
>         ... 1 more
>
> The reason for this issue I found is, if the database which this object
> being persisted, contains a row with primary key as 0, then adding new
> record fails. Seems a duplicate primary key check is done when default
> value (0) is assigned to the id attribute of type primitive long. A record
> with Primary Key value = 0 already exists, so duplicate primary key check
> fails.
>
> This zip file contains a sample code with which I was able to reproduce
> this error.
>
> Adding a row with id=0 before persisting any object throws the error
> mentioned above.
>
> I request all to help in resolving this issue. The id 0 has been in use
> for many days using hibernate. Hence we would like not to change this row
> in the database.
>
> Also would like to know if there is any config parameter to change the
> default value of the id from 0 to any other value.
>
>
>
> Thanks and Regards,
>
> *KRISHNAPRASAD SUBBARAO*
> Software Developer, Cloud Platform (BSS), Industry Solutions, India
> Software Lab
>
>


--
Albert Lee.

Re: Error in EntityManager.persist () if the database already contains a row with id=0

Posted by Albert Lee <al...@gmail.com>.
Check this out:

http://people.apache.org/~mikedd/nightly.builds/apache-openjpa-2.3.0-SNAPSHOT/docs/docbook/manual.html#jpa_overview_mapping_sequence

sequence-generator has attribute "int initialValue: The initial sequence
value."

Albert

On Mon, Feb 18, 2013 at 1:27 PM, Krishnaprasad Subbarao <
krishnaprasads@in.ibm.com> wrote:

> Hello,
>
> Following error occurs while I am trying to persist a record. The id field
> has  been assigned a default value (0) as per the guidelines.
>
> <openjpa-2.2.1-r422266:1396819 fatal store error> *
> org.apache.openjpa.persistence.RollbackException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:594*)
>         at com.ibm.test.jpa.JPAAddEntityTest.main(*
> JPAAddEntityTest.java:38*)
> Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal store error> *
> org.apache.openjpa.persistence.EntityExistsException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(*
> BrokerImpl.java:5080*)
>         at org.apache.openjpa.kernel.BrokerImpl.persistInternal(*
> BrokerImpl.java:2653*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2573*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2556*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(*
> SingleFieldManager.java:800*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:621*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:589*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:505*)
>         at org.apache.openjpa.kernel.StateManagerImpl.preFlush(*
> StateManagerImpl.java:3028*)
>         at org.apache.openjpa.kernel.PNewState.beforeFlush(*
> PNewState.java:44*)
>         at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(*
> StateManagerImpl.java:1042*)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(*
> BrokerImpl.java:2114*)
>         at org.apache.openjpa.kernel.BrokerImpl.flushSafe(*
> BrokerImpl.java:2074*)
>         at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(*
> BrokerImpl.java:1992*)
>         at org.apache.openjpa.kernel.LocalManagedRuntime.commit(*
> LocalManagedRuntime.java:81*)
>         at org.apache.openjpa.kernel.BrokerImpl.commit(*
> BrokerImpl.java:1516*)
>         at org.apache.openjpa.kernel.DelegatingBroker.commit(*
> DelegatingBroker.java:933*)
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:570*)
>         ... 1 more
>
> The reason for this issue I found is, if the database which this object
> being persisted, contains a row with primary key as 0, then adding new
> record fails. Seems a duplicate primary key check is done when default
> value (0) is assigned to the id attribute of type primitive long. A record
> with Primary Key value = 0 already exists, so duplicate primary key check
> fails.
>
> This zip file contains a sample code with which I was able to reproduce
> this error.
>
> Adding a row with id=0 before persisting any object throws the error
> mentioned above.
>
> I request all to help in resolving this issue. The id 0 has been in use
> for many days using hibernate. Hence we would like not to change this row
> in the database.
>
> Also would like to know if there is any config parameter to change the
> default value of the id from 0 to any other value.
>
>
>
> Thanks and Regards,
>
> *KRISHNAPRASAD SUBBARAO*
> Software Developer, Cloud Platform (BSS), Industry Solutions, India
> Software Lab
>
>


-- 
Albert Lee.

Re: Error in EntityManager.persist () if the database already contains a row with id=0

Posted by Rick Curtis <cu...@gmail.com>.
Could you try adding an @Version field to your Entities?

Thanks,
Rick


On Mon, Feb 18, 2013 at 1:27 PM, Krishnaprasad Subbarao <
krishnaprasads@in.ibm.com> wrote:

> Hello,
>
> Following error occurs while I am trying to persist a record. The id field
> has  been assigned a default value (0) as per the guidelines.
>
> <openjpa-2.2.1-r422266:1396819 fatal store error> *
> org.apache.openjpa.persistence.RollbackException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:594*)
>         at com.ibm.test.jpa.JPAAddEntityTest.main(*
> JPAAddEntityTest.java:38*)
> Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal store error> *
> org.apache.openjpa.persistence.EntityExistsException*: An object of type
> "com.ibm.wdp.bss.party.entity.PartyObject" with oid "0" already exists in
> this context; another cannot be persisted.
> FailedObject: com.ibm.wdp.bss.party.entity.PartyObject@7aa47aa4
>         at org.apache.openjpa.kernel.BrokerImpl.checkForDuplicateId(*
> BrokerImpl.java:5080*)
>         at org.apache.openjpa.kernel.BrokerImpl.persistInternal(*
> BrokerImpl.java:2653*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2573*)
>         at org.apache.openjpa.kernel.BrokerImpl.persist(*
> BrokerImpl.java:2556*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlushPC(*
> SingleFieldManager.java:800*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:621*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:589*)
>         at org.apache.openjpa.kernel.SingleFieldManager.preFlush(*
> SingleFieldManager.java:505*)
>         at org.apache.openjpa.kernel.StateManagerImpl.preFlush(*
> StateManagerImpl.java:3028*)
>         at org.apache.openjpa.kernel.PNewState.beforeFlush(*
> PNewState.java:44*)
>         at org.apache.openjpa.kernel.StateManagerImpl.beforeFlush(*
> StateManagerImpl.java:1042*)
>         at org.apache.openjpa.kernel.BrokerImpl.flush(*
> BrokerImpl.java:2114*)
>         at org.apache.openjpa.kernel.BrokerImpl.flushSafe(*
> BrokerImpl.java:2074*)
>         at org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(*
> BrokerImpl.java:1992*)
>         at org.apache.openjpa.kernel.LocalManagedRuntime.commit(*
> LocalManagedRuntime.java:81*)
>         at org.apache.openjpa.kernel.BrokerImpl.commit(*
> BrokerImpl.java:1516*)
>         at org.apache.openjpa.kernel.DelegatingBroker.commit(*
> DelegatingBroker.java:933*)
>         at org.apache.openjpa.persistence.EntityManagerImpl.commit(*
> EntityManagerImpl.java:570*)
>         ... 1 more
>
> The reason for this issue I found is, if the database which this object
> being persisted, contains a row with primary key as 0, then adding new
> record fails. Seems a duplicate primary key check is done when default
> value (0) is assigned to the id attribute of type primitive long. A record
> with Primary Key value = 0 already exists, so duplicate primary key check
> fails.
>
> This zip file contains a sample code with which I was able to reproduce
> this error.
>
> Adding a row with id=0 before persisting any object throws the error
> mentioned above.
>
> I request all to help in resolving this issue. The id 0 has been in use
> for many days using hibernate. Hence we would like not to change this row
> in the database.
>
> Also would like to know if there is any config parameter to change the
> default value of the id from 0 to any other value.
>
>
>
> Thanks and Regards,
>
> *KRISHNAPRASAD SUBBARAO*
> Software Developer, Cloud Platform (BSS), Industry Solutions, India
> Software Lab
>
>


-- 
*Rick Curtis*