The entity is using auto-generated identity - please see the attached orm.xml.
<id name="id"> <generated-value strategy="IDENTITY"/> </id> I am creating NEW instance and assigning an already existing primary key only to reproduce the problem. The real-life scenario is that a web service performs de-serialization of input XML parameter and, in the process, creates a new instance of an entity that has a primary key that already exists in database (this is done by server-side code generated using WL jwsc ant task from WL 9.2.1). em.merge() apparently doesn't work correctly in this case, since a new record is created in database on commit. Regards, Aleksandar Likic Pinaki Poddar wrote: > >>> just create a new instance of an entity, assign an already existing > primary key >>> A new record will be created in database, with new, auto-generated > primary key. > > What is the identity mechanicsm used by the entity class? > If the entity is using auto-generated identity then assigning an > "already existing" key is not recommneded. > If the entity is not using auto-generated, then assigning an existing > key *should* fail at commit with duplicate key exception. > > > Pinaki Poddar > BEA Systems > 415.402.7317 > > > -----Original Message----- > From: Aleksandar Likic (JIRA) [mailto:[EMAIL PROTECTED] > Sent: Sunday, May 27, 2007 9:05 AM > To: open-jpa-dev@incubator.apache.org > Subject: [jira] Created: (OPENJPA-245) Attach NEW and auto-increment > identity > > Attach NEW and auto-increment identity > -------------------------------------- > > Key: OPENJPA-245 > URL: https://issues.apache.org/jira/browse/OPENJPA-245 > Project: OpenJPA > Issue Type: Bug > Components: jpa > Affects Versions: 0.9.7, 0.9.6 > Environment: jdk1.5.0_11, Win XP, Fedora Core 6, Postgres 8.1 > (on Fedora) > Reporter: Aleksandar Likic > > > According to documentation (1.2 Attach Behavior), when an entity > instance is NEW (never detached): > > * If neither of the above cases apply, OpenJPA will check to see if > an instance with the same primary key values exists in the database. If > so, the object is considered detached. Otherwise, it is considered new. > > This doesn't work for me - a new record in database is created on commit > instead of updating the existing one. The "regular" case - > detach/modify/attach works fine - the existing record is updated. > > It is very easy to reproduce - just create a new instance of an entity, > assign an already existing primary key, call em.merge() and commit. A > new record will be created in database, with new, auto-generated primary > key. > > I stumbled on this trying to implement a web service that uses > OpenJPA-based backend. When servicing an "update" request, the web > service instantiates a NEW object (by performing XML de-serialization) > and calls em.merge to update the entity. A new record gets created > instead of updating an existing one. > > ------------ Entity class (START) ------------------------------ > > package exaple; > > public class Consumer implements java.io.Serializable { > > private long id; > > public long getId() { > return this.id; > } > > public void setId(long id) { > this.id = id; > } > > private java.lang.String firstName; > > public java.lang.String getFirstName() { > return this.firstName; > } > > public void setFirstName(java.lang.String firstName) { > this.firstName = firstName; > } > > private java.lang.String lastName; > > public java.lang.String getLastName() { > return this.lastName; > } > > public void setLastName(java.lang.String lastName) { > this.lastName = lastName; > } > > ------------ Entity class (END) ------------------------------ > ------------ persistence.xml (START) ------------------------------ > <?xml version="1.0" encoding="UTF-8"?> <persistence > xmlns="http://java.sun.com/xml/ns/persistence" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> > > <persistence-unit name="example" transaction-type="RESOURCE_LOCAL"> > > > <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provid > er> > > <!-- We must enumerate each entity in the persistence unit --> > <class>example.Consumer</class> > > <properties> > > <property name="openjpa.jdbc.DBDictionary" > value="postgres"/> > <property name="openjpa.ConnectionDriverName" > value="org.postgresql.Driver"/> > <property name="openjpa.ConnectionUserName" > value="app_user"/> > <property name="openjpa.ConnectionPassword" > value="app_user"/> > <property name="openjpa.ConnectionURL" > value="jdbc:postgresql://localhost/alikic"/> > <property name="openjpa.Log" > value="DefaultLevel=WARN,SQL=TRACE"/> > > </properties> > </persistence-unit> > > </persistence> > ------------ persistence.xml (END) ------------------------------ > ------------ orm.xml (START) ------------------------------ > <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm > orm_1_0.xsd" > version="1.0"> > <entity class="example.Consumer"> > <attributes> > <id name="id"> > <generated-value strategy="IDENTITY"/> > </id> > <basic name="firstName"> > <column name="first_name"/> > </basic> > <basic name="lastName"> > <column name="last_name"/> > </basic> > </attributes> > </entity> > </entity-mappings> > ------------ orm.xml (END) ------------------------------ > > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > > > Notice: This email message, together with any attachments, may contain > information of BEA Systems, Inc., its subsidiaries and affiliated > entities, that may be confidential, proprietary, copyrighted and/or > legally privileged, and is intended solely for the use of the individual > or entity named in this message. If you are not the intended recipient, > and have received this message in error, please immediately return this by > email and then delete it. > > -- View this message in context: http://www.nabble.com/-jira--Created%3A-%28OPENJPA-245%29-Attach-NEW-and-auto-increment-identity-tf3823771.html#a10854791 Sent from the open-jpa-dev mailing list archive at Nabble.com.