Hi,
I'm trying to delete records from a database table based on some info in
another related table. Unfortunately I'm getting an exception when using
the DeleteQuery. Has this been fixed or is there any other way to delete
like this?
java.lang.RuntimeException: db relationships not supported
at
org.apache.cayenne.access.trans.DeleteTranslator.dbRelationshipAdded(DeleteTranslator.java:37)
at
org.apache.cayenne.access.trans.QueryAssemblerHelper.appendObjPath(QueryAssemblerHelper.java:103)
at
org.apache.cayenne.access.trans.QualifierTranslator.objectNode(QualifierTranslator.java:339)
at org.apache.cayenne.exp.Expression.traverse(Expression.java:514)
at org.apache.cayenne.exp.Expression.traverse(Expression.java:511)
at org.apache.cayenne.exp.Expression.traverse(Expression.java:491)
at
org.apache.cayenne.access.trans.QualifierTranslator.doTranslation(QualifierTranslator.java:74)
at
org.apache.cayenne.access.trans.DeleteTranslator.createSqlString(DeleteTranslator.java:51)
at
org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:95)
at
org.apache.cayenne.access.jdbc.UpdateAction.performAction(UpdateAction.java:91)
at
org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:59)
at
org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
at
org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:319)
at
org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:60)
at
org.apache.cayenne.access.DataDomainQueryAction$1.transform(DataDomainQueryAction.java:291)
at
org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:820)
at
org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:288)
at
org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:109)
at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:730)
at
org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:217)
at
org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:54)
at
org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1386)
at
org.apache.cayenne.access.DataContext.performGenericQuery(DataContext.java:1341)
at
org.apache.cayenne.access.DataContext.performNonSelectingQuery(DataContext.java:1396)
at
ipa.printexpress.datahelpers.Session.deleteEntityCollection(Session.java:172)
at
ipa.px.tracker.trackerserver.purge.PurgeDatabaseHelper.purgeElements(PurgeDatabaseHelper.java:63)
at
ipa.px.tracker.trackerserver.purge.PurgeDatabaseHelper.purge(PurgeDatabaseHelper.java:476)
at
ipa.px.tracker.trackerserver.remoteobjects.Purger.purgeEditions(Purger.java:94)
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
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
at sun.rmi.transport.Transport$1.run(Transport.java:159)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:619)
BTW. I'm using Cayenne version 2 (not sure which exact version but can
find out if required).
Cheers,
Dave