Re: DeleteQuery exception

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Wed Feb 27 2008 - 07:05:11 EST

  • Next message: Kevin Menard: "RE: Cayenne and Spring (a Hibernate inspired question)"

    Yeah, that's a limitation of DeleteQuery (which btw is deprecated in
    3.0, replaced with EJBQLQuery). It is mapped to a single table SQL
    delete statement and does not support joins. In 2.0 your alternative
    is SQLTemplate. In 3.0 - SQLTemplate and EJBQLQuery (that would allow
    to use subqueries in the WHERE clause, but still no joins).

    Andrus

    On Feb 27, 2008, at 11:56 AM, Dave Merrin wrote:

    > 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
    >



    This archive was generated by hypermail 2.0.0 : Wed Feb 27 2008 - 07:05:46 EST