Re: Bug when persisting two related objects
I don't think it matters whether you are using DB2 or any other database. Getting back to one of Patrick's earlier requests... Can you post more information on the Project and Base classes? You've posted a snippet of the Base class and it's ID, but how are you defining the Project and it's ID? As Abe as pointed out, if two classes in an inheritance hierarchy use the same ID class, then unique id values need to be provided for each instance. Could you also post your DDL for generating your tables? Was this hand-generated DDL or created by the OpenJPA tooling? Thanks. Kevin On 5/10/07, Majeed Arni [EMAIL PROTECTED] wrote: I am using DB2 to generate the Identity as in the DDL: ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) And in code for the base class: @MappedSuperclass @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Base { . @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = ID) private long someID; .} Will this not use a unique ID generator per derived class? Is there a better way of doing it in DB2? Thanks for the help. Majeed Arni Abe White wrote: Are the two types related by inheritance? If two classes in an inheritance hierarchy use the same id class, then every instance of both classes must have a distinct id value. If you want instances in inheritance-related classes to be able to have the same id values, then you must use different id classes for different classes in the inheritance hierarchy. 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/Bug-when-persisting-two-related-objects-tf3719319.html#a10416417 Sent from the open-jpa-dev mailing list archive at Nabble.com.
Re: Bug when persisting two related objects
The DDL is handmade. There is nothing in code about Identity. It is done in Database. I found a workaround for this problem by just moving the code around. Looks like a bug is the wrong message it sends. Also, is there a way to generate DDL from Java code? I saw create=true for Derby, does that work for DB2 also? Thanks again. Majeed Kevin Sutter wrote: I don't think it matters whether you are using DB2 or any other database. Getting back to one of Patrick's earlier requests... Can you post more information on the Project and Base classes? You've posted a snippet of the Base class and it's ID, but how are you defining the Project and it's ID? As Abe as pointed out, if two classes in an inheritance hierarchy use the same ID class, then unique id values need to be provided for each instance. Could you also post your DDL for generating your tables? Was this hand-generated DDL or created by the OpenJPA tooling? Thanks. Kevin On 5/10/07, Majeed Arni [EMAIL PROTECTED] wrote: I am using DB2 to generate the Identity as in the DDL: ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) And in code for the base class: @MappedSuperclass @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Base { . @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = ID) private long someID; .} Will this not use a unique ID generator per derived class? Is there a better way of doing it in DB2? Thanks for the help. Majeed Arni Abe White wrote: Are the two types related by inheritance? If two classes in an inheritance hierarchy use the same id class, then every instance of both classes must have a distinct id value. If you want instances in inheritance-related classes to be able to have the same id values, then you must use different id classes for different classes in the inheritance hierarchy. 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/Bug-when-persisting-two-related-objects-tf3719319.html#a10416417 Sent from the open-jpa-dev mailing list archive at Nabble.com. -- View this message in context: http://www.nabble.com/Bug-when-persisting-two-related-objects-tf3719319.html#a10432604 Sent from the open-jpa-dev mailing list archive at Nabble.com.
Re: Bug when persisting two related objects
Have a base class, say B and have 2 classes derived from it X and Y. B is @MappedSuperclass @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) X has oneY (1 to 1) unidirection @OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.ALL}) @JoinColumn(name = Y_ID, nullable=false) Y does not know of X. Caused by: 0.9.7-incubating fatal store error org.apache.openjpa.persistence.RollbackException: Attempt to assign id com.testc.reporting.core.pbo.Base-201 to new instance com.testc.reporting.core.pbo.Project-com.testc.reporting.core.pbo.Base-201 failed; there is already an object in the L1 cache with this id. You must delete this object (in a previous transaction or the current one) before reusing its id. This error can also occur when a horizontally or vertically mapped classes uses auto-increment application identity and does not use a hierarchy of application identity classes. at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:420) at com.testc.reporting.core.TestProject.testCreateProject(TestProject.java:54) at com.testc.reporting.core.TestProject.testProject(TestProject.java:24) at com.testc.reporting.core.Main.main(Main.java:19) ... 27 more Caused by: 0.9.7-incubating fatal user error org.apache.openjpa.persistence.ArgumentException: Attempt to assign id com.testc.reporting.core.pbo.Base-201 to new instance com.testc.reporting.core.pbo.Project-com.testc.reporting.core.pbo.Base-201 failed; there is already an object in the L1 cache with this id. You must delete this object (in a previous transaction or the current one) before reusing its id. This error can also occur when a horizontally or vertically mapped classes uses auto-increment application identity and does not use a hierarchy of application identity classes. FailedObject: com.testc.reporting.core.pbo.Project-com.testc.reporting.core.pbo.Base-201 at org.apache.openjpa.kernel.BrokerImpl$ManagedCache.commitNew(BrokerImpl.java:4528) at org.apache.openjpa.kernel.BrokerImpl.setStateManager(BrokerImpl.java:3787) at org.apache.openjpa.kernel.StateManagerImpl.commit(StateManagerImpl.java:925) at org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2194) at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1801) at org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:93) at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1311) at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:866) at org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:409) ... 30 more Patrick Linskey-2 wrote: Hi, Can you describe the relationship between Project and Base (and any other relevant persistent classes and superclasses)? If possible, it'd be great to see some relevant code snippets. Thanks, -Patrick On 5/9/07, Majeed Arni [EMAIL PROTECTED] wrote: I have 2 objects related, when I create both in a transaction and set one object on another and then committing. I get this error. The objects are stored in DB2 with auto increment -ing identity. This error can also occur when a horizontally or vertically mapped classes uses auto-increment application identity and does not use a hierarchy of application identity classes. Caused by: 0.9.7-incubating fatal user error org.apache.openjpa.persistence.ArgumentException: Attempt to assign id com.XXX.core.pbo.Base-141 to new instance com..core.pbo.Project-com..core.pbo.Base-141 failed; there is already an object in the L1 cache with this id. You must delete this object (in a previous transaction or the current one) before reusing its id. This error can also occur when a horizontally or vertically mapped classes uses auto-increment application identity and does not use a hierarchy of application identity classes. FailedObject: com.X.core.pbo.Project-com..core.pbo.Base-141 at org.apache.openjpa.kernel.BrokerImpl$ManagedCache.commitNew( BrokerImpl.java:4528) at org.apache.openjpa.kernel.BrokerImpl.setStateManager( BrokerImpl.java:3787) at org.apache.openjpa.kernel.StateManagerImpl.commit( StateManagerImpl.java:925) at org.apache.openjpa.kernel.BrokerImpl.endTransaction( BrokerImpl.java:2194) at org.apache.openjpa.kernel.BrokerImpl.afterCompletion( BrokerImpl.java:1801) at org.apache.openjpa.kernel.LocalManagedRuntime.commit( LocalManagedRuntime.java:93) at org.apache.openjpa.kernel.BrokerImpl.commit( BrokerImpl.java:1311) at org.apache.openjpa.kernel.DelegatingBroker.commit( DelegatingBroker.java:866) at org.apache.openjpa.persistence.EntityManagerImpl.commit( EntityManagerImpl.java:409) Regards, Majeed Arni -- Patrick Linskey 202 669 5907 -- View this message in context:
Re: Bug when persisting two related objects
Are the two types related by inheritance? If two classes in an inheritance hierarchy use the same id class, then every instance of both classes must have a distinct id value. If you want instances in inheritance-related classes to be able to have the same id values, then you must use different id classes for different classes in the inheritance hierarchy. 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.
Re: Bug when persisting two related objects
I am using DB2 to generate the Identity as in the DDL: ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1) And in code for the base class: @MappedSuperclass @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public abstract class Base { . @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = ID) private long someID; .} Will this not use a unique ID generator per derived class? Is there a better way of doing it in DB2? Thanks for the help. Majeed Arni Abe White wrote: Are the two types related by inheritance? If two classes in an inheritance hierarchy use the same id class, then every instance of both classes must have a distinct id value. If you want instances in inheritance-related classes to be able to have the same id values, then you must use different id classes for different classes in the inheritance hierarchy. 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/Bug-when-persisting-two-related-objects-tf3719319.html#a10416417 Sent from the open-jpa-dev mailing list archive at Nabble.com.