From open-jpa-dev-return-3107-apmail-incubator-open-jpa-dev-archive=incubator.apache.org@incubator.apache.org Wed Apr 04 03:41:12 2007 Return-Path: Delivered-To: apmail-incubator-open-jpa-dev-archive@locus.apache.org Received: (qmail 79780 invoked from network); 4 Apr 2007 03:41:11 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Apr 2007 03:41:11 -0000 Received: (qmail 33025 invoked by uid 500); 4 Apr 2007 03:41:18 -0000 Delivered-To: apmail-incubator-open-jpa-dev-archive@incubator.apache.org Received: (qmail 32893 invoked by uid 500); 4 Apr 2007 03:41:18 -0000 Mailing-List: contact open-jpa-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: open-jpa-dev@incubator.apache.org Delivered-To: mailing list open-jpa-dev@incubator.apache.org Received: (qmail 32883 invoked by uid 99); 4 Apr 2007 03:41:17 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 20:41:17 -0700 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: domain of plinskey@bea.com designates 66.248.192.39 as permitted sender) Received: from [66.248.192.39] (HELO repmmg02.bea.com) (66.248.192.39) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 03 Apr 2007 20:41:09 -0700 Received: from repmmr01.bea.com (repmmr01.bea.com [10.160.29.71]) by repmmg02.bea.com (Switch-3.2.5/Switch-3.2.5) with ESMTP id l343dcOK024923 for ; Tue, 3 Apr 2007 20:40:48 -0700 Received: from repbex02.amer.bea.com (repbex02.bea.com [10.160.26.99]) by repmmr01.bea.com (Switch-3.2.5/Switch-3.2.5) with ESMTP id l343dbIr030750 for ; Tue, 3 Apr 2007 20:40:48 -0700 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Subject: RE: why not an EntityExistsException was thrown? Date: Tue, 3 Apr 2007 20:40:18 -0700 Message-ID: <7D856CDFE035FF45A0420ACBD71BDD6303C83684@repbex02.amer.bea.com> In-Reply-To: <9830350.post@talk.nabble.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: why not an EntityExistsException was thrown? Thread-Index: Acd2aQk+3J3hmYodTrqlMcuOgscEsQAAbwgg References: <9830350.post@talk.nabble.com> From: "Patrick Linskey" To: x-BEA-PMX-Instructions: AV x-BEA-MM: Internal-To-External X-Virus-Checked: Checked by ClamAV on apache.org > <2|true|0.9.7-incubating-SNAPSHOT> org.apache.openjpa.util.StoreException: You definitely should not be getting that exception -- OpenJPA should only be throwing exception types that are in the org.apache.openjpa.persistence package and sub-packages. Can you print out the actual class of the exception that is thrown (i.e., System.err.println(e.getClass()) just in case the exception is just doing a bad job of printing itself out? Thanks, -Patrick -- Patrick Linskey BEA Systems, Inc. _______________________________________________________________________ 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. > -----Original Message----- > From: wanyna [mailto:wanyna@hotmail.com] > Sent: Tuesday, April 03, 2007 8:26 PM > To: open-jpa-dev@incubator.apache.org > Subject: why not an EntityExistsException was thrown? > > > I was confused in result of my test cases. > My test is about JPA exceptions. I use derby in my tests. > The first case is simply persist an object, the PK of the > object has existed > in database, > so exception arose. > entityManager = factory.createEntityManager(); > entityManager.getTransaction().begin(); > ... > entityManager.persist(anObject); > entityManager.getTransaction().commit(); > exception is: > <2|true|0.9.7-incubating-SNAPSHOT> > org.apache.openjpa.util.StoreException: > The transaction has been rolled back. See the nested > exceptions for details > on the errors that occurred. > at > org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerI > mpl.java:2091) > at > org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1938) > at > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1836) > at > org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerIm > pl.java:1754) > at > org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalMana > gedRuntime.java:76) > at > org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1311) > at > org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBr > oker.java:863) > at > org.apache.openjpa.persistence.EntityManagerImpl.commit(Entity > ManagerImpl.java:406) > at test.Main.main(Main.java:82) > Caused by: <2|false|0.9.7-incubating-SNAPSHOT> > org.apache.openjpa.util.StoreException: The statement was > aborted because it > would have caused a duplicate key value in a unique or primary key > constraint or unique index identified by 'SQL070403054930170' > defined on > 'BSC'. {prepstmnt 15774883 INSERT INTO BSC (objid, objname, created, > msc_name, objclass) VALUES (?, ?, ?, ?, ?) [params=(long) 1, (String) > objname1, (Timestamp) 2006-05-04 18:13:51.0, (String) > objname0, (String) > bsc]} [code=-1, state=23505] > FailedObject: generate.Bsc@5d391d > at > org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBD > ictionary.java:3764) > at > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptio > ns.java:94) > at > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptio > ns.java:64) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.fl > ushInternal(PreparedStatementManagerImpl.java:103) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.fl > ush(PreparedStatementManagerImpl.java:68) > at > org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flu > shPrimaryRow(OperationOrderUpdateManager.java:200) > at > org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flu > sh(OperationOrderUpdateManager.java:86) > at > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(Abs > tractUpdateManager.java:86) > at > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(Abs > tractUpdateManager.java:69) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStor > eManager.java:511) > at > org.apache.openjpa.kernel.DelegatingStoreManager.flush(Delegat > ingStoreManager.java:127) > ... 8 more > Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: > The statement > was aborted because it would have caused a duplicate key > value in a unique > or primary key constraint or unique index identified by > 'SQL070403054930170' > defined on 'BSC'. {prepstmnt 15774883 INSERT INTO BSC (objid, objname, > created, msc_name, objclass) VALUES (?, ?, ?, ?, ?) [params=(long) 1, > (String) objname1, (Timestamp) 2006-05-04 18:13:51.0, > (String) objname0, > (String) bsc]} [code=-1, state=23505] > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(Lo > ggingConnectionDecorator.java:188) > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$ 800(LoggingConnectionDecorator.java:53) > at > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$Logging Connection> $LoggingPreparedStatement.executeUpdate(LoggingConnectionDecor > ator.java:854) > at > org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.execut > eUpdate(DelegatingPreparedStatement.java:266) > at > org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPrepared Statement.executeUpdate(JDBCStoreManager.java:1360) > at > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.fl > ushInternal(PreparedStatementManagerImpl.java:92) > ... 15 more > > I wonder why not an EntityExistsException was thrown? > > In the second case, I add a query before persist, > entityManager = factory.createEntityManager(); > /* > * query before persist, even bofore > transaction effects samely. > * this query makes exception thrown in > persist section difference. > * it seems that query what entity is > not important, > * but must get result and result must > has some record. > */ > entityManager.createQuery(jpql).getResultList(); > > entityManager.getTransaction().begin(); > ... > entityManager.persist(anObject); > entityManager.getTransaction().commit(); > exception: > <2|false|0.9.7-incubating-SNAPSHOT> > org.apache.openjpa.persistence.EntityExistsException: An > object of type > "generate.Bsc" with oid "generate.Bsc-1:objname1" already > exists in this > context; another cannot be persisted. > FailedObject: generate.Bsc@14b6bed > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2370) > at > org.apache.openjpa.kernel.BrokerImpl.persist(BrokerImpl.java:2206) > at > org.apache.openjpa.kernel.DelegatingBroker.persist(DelegatingB > roker.java:991) > at > org.apache.openjpa.persistence.EntityManagerImpl.persist(Entit > yManagerImpl.java:526) > at test.Main.main(Main.java:72) > FailedObject:generate.Bsc@14b6bed > > An EntityExistsException was thrown this time, why? > > Exception is different, and when exception was thrown is also > different. > first case exception was caught at commit, > second case, exception was caught at persist, why? > > -- > View this message in context: > http://www.nabble.com/why-not-an-EntityExistsException-was-thr own--tf3523673.html#a9830350 > Sent from the open-jpa-dev mailing list archive at Nabble.com. > > 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.