FWIW Configuring the constraint update manager can be done by adding this
property to persistence.xml :

<property name="openjpa.jdbc.UpdateManager" value="constraint"/>

-mike

On Thu, Jul 3, 2008 at 11:11 AM, Fay Wang <[EMAIL PROTECTED]> wrote:

> Hi,
>    From the stack trace:
> ...
>
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
>    at
>
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:162)
>    at
>
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:89)
>
> ...
>
>   it appears that you are using OperationOrderUpdateManager. My
> understanding is that for OperationOrderUpdateManager, application is
> responsible for the ordering of the delete operations. You might want to try
> ConstraintUpdateManager to see if it fixes your problem.
>
> -fay
>
>
> --- On Tue, 7/1/08, Beniamin Mazan <[EMAIL PROTECTED]> wrote:
>
> > From: Beniamin Mazan <[EMAIL PROTECTED]>
> > Subject: Problem with foreign keys on DB and JPA delete
> > To: users@openjpa.apache.org
> > Date: Tuesday, July 1, 2008, 5:01 PM
> > I got
> > foreign key on delete cascade constraint on my database for
> > relation between
> > Product and Subproduct
> >
> > CREATE TABLE product (
> >     id character varying(36) PRIMARY KEY,
> >     ...
> > );
> >
> > CREATE TABLE voice_mail (
> >     id character varying(36) PRIMARY KEY,
> >     flag_attribure boolean NOT NULL,
> >     .....
> >     phone_id character varying(255) UNIQUE,
> >     FOREIGN KEY (phone_id) REFERENCES phone(id) ON UPDATE
> > CASCADE ON DELETE
> > CASCADE
> > );
> >
> > My Entities are in relation declared as:
> >
> > Within Product class
> > @OneToOne(cascade = CascadeType.ALL, fetch =
> > FetchType.EAGER, mappedBy =
> > "product")
> >
> > and within Subproduct class
> > @OneToOne(cascade = {CascadeType.MERGE,
> > CascadeType.REFRESH}, fetch =
> > FetchType.EAGER)
> > @JoinColumn(name = "product_id", unique = true,
> > nullable = true)
> >
> >
> > and persistence.xml properties
> >               <properties>
> >                       <property name="openjpa.Sequence"
> > value="class-table(Table=_SEQ_GENERATOR,
> > UseAliases=true)"/>
> >                       <property
> > name="openjpa.jdbc.SynchronizeMappings"
> > value="buildSchema(SchemaAction=refresh)" />
> >                       <property name="openjpa.jdbc.DBDictionary"
> > value="postgres"/>
> >                       <property name="openjpa.Multithreaded"
> > value="true" />
> >             <property
> > name="openjpa.TransactionMode"
> > value="managed" />
> >             <property
> > name="openjpa.AutoDetach"
> > value="commit" />
> >             <property
> > name="openjpa.RestoreState" value="all"
> > />
> >             <property
> > name="openjpa.Optimistic"
> > value="true"/>
> >               </properties>
> >
> > 1. I got OptimistickLockException when I try to delete
> > object of Product
> > class. It tells that Subproduct was modified.
> > 2. Using <property
> > name="openjpa.jdbc.SchemaFactory"
> > value="native(ForeignKeys=true)"/>  does not
> > change anything
> > 3. Using <property
> > name="openjpa.jdbc.MappingDefaults"
> > value="ForeignKeyDeleteAction=restrict,
> > JoinForeignKeyDeleteAction=restrict"/> changes
> > stacktrace to:
> >
> >       at
> >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
> >       ... 72 more
> > NestedThrowables:
> > org.postgresql.util.PSQLException: ERROR: current
> > transaction is aborted,
> > commands ignored until end of transaction block
> >       at
> >
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1548)
> >       at
> >
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1316)
> >       at
> >
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:191)
> >       at
> >
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452)
> >       at
> >
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:351)
> >       at
> >
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:305)
> >       at sun.reflect.GeneratedMethodAccessor597.invoke(Unknown
> > Source)
> >       at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> >
> org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:471)
> >       at $Proxy341.executeUpdate(Unknown Source)
> >       at
> >
> org.tranql.connector.jdbc.PreparedStatementHandle.executeUpdate(PreparedStatementHandle.java:103)
> >       at
> >
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> >       at
> >
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeUpdate(LoggingConnectionDecorator.java:856)
> >       at
> >
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> >       at
> >
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:269)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeUpdate(JDBCStoreManager.java:1363)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:97)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:73)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flushPrimaryRow(OperationOrderUpdateManager.java:162)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.OperationOrderUpdateManager.flush(OperationOrderUpdateManager.java:89)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> >       at
> >
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:514)
> >       at
> >
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> >       at
> > org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1954)
> >       at
> > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1852)
> >       at
> >
> org.apache.openjpa.kernel.BrokerImpl.beforeCompletion(BrokerImpl.java:1770)
> >       at
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:514)
> >       at
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.beforeCompletion(TransactionImpl.java:499)
> >       at
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.beforePrepare(TransactionImpl.java:400)
> >       at
> >
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:257)
> >       at
> >
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:245)
> >       at
> >
> org.apache.openejb.core.transaction.TransactionPolicy.commitTransaction(TransactionPolicy.java:141)
> >       at
> >
> org.apache.openejb.core.transaction.TxRequiresNew.afterInvoke(TxRequiresNew.java:72)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:233)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
> >       at
> >
> org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:217)
> >       at
> >
> org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
> >       at
> >
> org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
> >       at
> >
> org.apache.openejb.util.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
> >       at $Proxy315.deleteVoice(Unknown Source)
> >       at myApp.myCore.deleteVoiceNrn(myCore.java:548)
> >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> >       at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >       at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:146)
> >       at
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBMethodInvoker.directEjbInvoke(EJBMethodInvoker.java:156)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBMethodInvoker.ejbInvoke(EJBMethodInvoker.java:119)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBMethodInvoker.invoke(EJBMethodInvoker.java:72)
> >       at
> >
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:63)
> >       at
> >
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56)
> >       at
> >
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:89)
> >       at
> >
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:207)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBInterceptor.intercept(EJBInterceptor.java:148)
> >       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> > Method)
> >       at
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >       at
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >       at java.lang.reflect.Method.invoke(Method.java:597)
> >       at
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:146)
> >       at
> >
> org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:129)
> >       at
> >
> org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:73)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer.invokeWebService(StatelessContainer.java:277)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:206)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:188)
> >       at
> >
> org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:165)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBMethodInvoker.preEjbInvoke(EJBMethodInvoker.java:94)
> >       at
> >
> org.apache.geronimo.cxf.ejb.EJBMethodInvoker.invoke(EJBMethodInvoker.java:69)
> >       at
> >
> org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:63)
> >       at
> >
> org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56)
> >       at
> >
> org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
> >       at
> >
> org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92)
> >       at
> >
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:207)
> >       at
> >
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:73)
> >       at
> >
> org.apache.geronimo.cxf.GeronimoDestination.invoke(GeronimoDestination.java:115)
> >       at
> >
> org.apache.geronimo.cxf.CXFWebServiceContainer.processPOST(CXFWebServiceContainer.java:107)
> >       at
> >
> org.apache.geronimo.cxf.CXFWebServiceContainer.invoke(CXFWebServiceContainer.java:83)
> >       at
> >
> org.apache.geronimo.tomcat.TomcatEJBWebServiceContext$EJBWebServiceValve.invoke(TomcatEJBWebServiceContext.java:180)
> >       at
> >
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> >       at
> >
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> >       at
> >
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> >       at
> > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
> >       at
> >
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
> >       at
> >
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> >       at
> >
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
> >       at
> > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> >
> >
> > I don't know what to do.
> > Thanks in advance
> >
> > -----
> > thanks
> > Beniamin
> > --
> > View this message in context:
> >
> http://www.nabble.com/Problem-with-foreign-keys-on-DB-and-JPA-delete-tp18227738p18227738.html
> > Sent from the OpenJPA Users mailing list archive at
> > Nabble.com.
>
>
>
>

Reply via email to