I have two OJB classes, VersionBean and Namespace.  VersionBean has a
foreign key reference to a namespace; it's fields are:

===[BEGIN VersionBean.java]===
...
   /**
    * @ojb.field column="id"
    *            primarykey="true"
    */
   private Integer _id;

   /**
    * @ojb.field column="value"
    */
   private String _value;

   /**
    * @ojb.field column="namespaceId"
    *            nullable="true"
    */
   private Integer _namespaceId;

   /**
    * @ojb.reference
    *      auto-update="none"
    *      auto-delete="false"
    *      class-ref="com.webify.prototype.domain.Namespace"
    *      foreignkey="_namespaceId"
    */
   private Namespace _namespace;
...
===[END VersionBean.java]===

Namespace fields are like so:

===[BEING Namespace.java]===
...
   /**
    * @ojb.field column="id"
    *            primarykey="true"
    *            autoincrement="ojb"
    */
   private Integer _id;

   /**
    * @ojb.field column="namespace"
    */
   private String _namespace;
...
===[END Namespace.java]===

I want to perform a report query for the ids of VersionBeans that
reference namespaces with a given namespace value.  I've tried this:

===[BEGIN Query #1]===
       Criteria c = new Criteria();
       c.addGreaterOrEqualThan("id", new Integer(1));
       c.addEqualTo("_namespace.namespace", NS);

       ReportQueryByCriteria query =
QueryFactory.newReportQuery(VersionBean.class, c);
       query.setAttributes(new String[] {"id"});

       Iterator i = broker.getReportQueryIteratorByQuery(query);
===[END Query #1]===

I get the following exception when this code executes:

===[BEGIN error from Query #1]===
org.apache.ojb.broker.PersistenceBrokerSQLException:
* Can't prepare statement:
* sql statement was 'SELECT id FROM p_version A0 INNER JOIN
p_namespace A1 ON A0.namespaceId=A1.id WHERE (id >= ?) AND namespace =
?'
* Exception message is [Column name 'ID' is in more than one table in
the FROM list.]
* Vendor error code [30000]
* SQL state code [42X03]
        at 
org.apache.ojb.broker.util.ExceptionHelper.generateException(ExceptionHelper.java:256)
... (full stack at bottom of this email message)
===[END error from Query #1]===

As I understand this, I need to disambiguate the id attribute using aliases:

===[BEGIN Query #2]===
       Criteria c = new Criteria();
       c.setAlias("VER");
       c.addGreaterOrEqualThan("id", new Integer(1));
       c.addEqualTo("_namespace.namespace", NS);

       ReportQueryByCriteria query =
QueryFactory.newReportQuery(VersionBean.class, c);
       query.setAttributes(new String[] {"VER.id"});

       Iterator i = broker.getReportQueryIteratorByQuery(query);
===[END Query #2]===

===[BEGIN error from Query #2]===
[org.apache.ojb.broker.accesslayer.StatementsForClassImpl] ERROR:
* Can't prepare statement:
* sql statement was 'SELECT VER.id FROM p_version A0 INNER JOIN
p_namespace A1 ON A0.namespaceId=A1.id WHERE (id >= ?) AND namespace =
?'
* Exception message is [Column 'VER.ID' is either not in any table in
the FROM list or appears within a join specification and is outside
the scope of the join specification or appears in a HAVING clause and
is not in the GROUP BY list. If this is a CREATE or ALTER TABLE
statement then 'VER.ID' is not a column in the target table.]
* Vendor error code [30000]
* SQL state code [42X04]
* The root stack trace is -->
* ERROR 42X04: Column 'VER.ID' is either not in any table in the FROM
list or appears within a join specification and is outside the scope
of the join specification or appears in a HAVING clause and is not in
the GROUP BY list. If this is a CREATE or ALTER TABLE  statement then
'VER.ID' is not a column in the target table.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown 
Source)
... (full stack at bottom of this email message)
===[END error from Query #2]===

Which of the APIs am I misunderstanding?

Thanks,
Aaron

Full error stacks for reference:

===[BEGIN error from Query #1]===
org.apache.ojb.broker.PersistenceBrokerSQLException:
* Can't prepare statement:
* sql statement was 'SELECT id FROM p_version A0 INNER JOIN
p_namespace A1 ON A0.namespaceId=A1.id WHERE (id >= ?) AND namespace =
?'
* Exception message is [Column name 'ID' is in more than one table in
the FROM list.]
* Vendor error code [30000]
* SQL state code [42X03]
        at 
org.apache.ojb.broker.util.ExceptionHelper.generateException(ExceptionHelper.java:256)
        at 
org.apache.ojb.broker.util.ExceptionHelper.generateException(ExceptionHelper.java:53)
        at 
org.apache.ojb.broker.accesslayer.StatementsForClassImpl.getPreparedStmt(StatementsForClassImpl.java:176)
        at 
org.apache.ojb.broker.accesslayer.StatementManager.getPreparedStatement(StatementManager.java:609)
        at 
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:269)
        at 
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:72)
        at 
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:187)
        at 
org.apache.ojb.broker.accesslayer.ReportQueryRsIterator.<init>(ReportQueryRsIterator.java:44)
        at 
org.apache.ojb.broker.core.ReportRsIteratorFactoryImpl.createRsIterator(ReportRsIteratorFactoryImpl.java:59)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:2073)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorFromQuery(PersistenceBrokerImpl.java:2120)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorByQuery(PersistenceBrokerImpl.java:2047)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIteratorByQuery(DelegatingPersistenceBroker.java:362)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIteratorByQuery(DelegatingPersistenceBroker.java:362)
        at com.webify.prototype.Driver.scenario4(Driver.java:124)
        at com.webify.prototype.Driver.run(Driver.java:65)
        at com.webify.prototype.Driver.main(Driver.java:46)
Caused by: SQL Exception: Column name 'ID' is in more than one table
in the FROM list.
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
Source)
        at org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
Source)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at 
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:168)
        at $Proxy1.prepareStatement(Unknown Source)
        at 
org.apache.ojb.broker.accesslayer.StatementsForClassImpl.prepareStatement(StatementsForClassImpl.java:263)
        at 
org.apache.ojb.broker.accesslayer.StatementsForClassImpl.getPreparedStmt(StatementsForClassImpl.java:171)
        ... 14 more
===[END error from Query #1]===

===[BEGIN error from Query #2]===
[org.apache.ojb.broker.accesslayer.StatementsForClassImpl] ERROR:
* Can't prepare statement:
* sql statement was 'SELECT VER.id FROM p_version A0 INNER JOIN
p_namespace A1 ON A0.namespaceId=A1.id WHERE (id >= ?) AND namespace =
?'
* Exception message is [Column 'VER.ID' is either not in any table in
the FROM list or appears within a join specification and is outside
the scope of the join specification or appears in a HAVING clause and
is not in the GROUP BY list. If this is a CREATE or ALTER TABLE
statement then 'VER.ID' is not a column in the target table.]
* Vendor error code [30000]
* SQL state code [42X04]
* The root stack trace is -->
* ERROR 42X04: Column 'VER.ID' is either not in any table in the FROM
list or appears within a join specification and is outside the scope
of the join specification or appears in a HAVING clause and is not in
the GROUP BY list. If this is a CREATE or ALTER TABLE  statement then
'VER.ID' is not a column in the target table.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown 
Source)
        at 
org.apache.derby.impl.sql.compile.ColumnReference.bindExpression(Unknown
Source)
        at org.apache.derby.impl.sql.compile.ResultColumn.bindExpression(Unknown
Source)
        at 
org.apache.derby.impl.sql.compile.ResultColumnList.bindExpressions(Unknown
Source)
        at org.apache.derby.impl.sql.compile.SelectNode.bindExpressions(Unknown 
Source)
        at 
org.apache.derby.impl.sql.compile.DMLStatementNode.bindExpressions(Unknown
Source)
        at org.apache.derby.impl.sql.compile.DMLStatementNode.bind(Unknown 
Source)
        at org.apache.derby.impl.sql.compile.ReadCursorNode.bind(Unknown Source)
        at org.apache.derby.impl.sql.compile.CursorNode.bind(Unknown Source)
        at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
        at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
        at 
org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement20.<init>(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedPreparedStatement30.<init>(Unknown 
Source)
        at org.apache.derby.jdbc.Driver30.newEmbedPreparedStatement(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown 
Source)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at 
org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:168)
        at $Proxy1.prepareStatement(Unknown Source)
        at 
org.apache.ojb.broker.accesslayer.StatementsForClassImpl.prepareStatement(StatementsForClassImpl.java:263)
        at 
org.apache.ojb.broker.accesslayer.StatementsForClassImpl.getPreparedStmt(StatementsForClassImpl.java:171)
        at 
org.apache.ojb.broker.accesslayer.StatementManager.getPreparedStatement(StatementManager.java:609)
        at 
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl.java:269)
        at 
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObject.java:72)
        at 
org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:187)
        at 
org.apache.ojb.broker.accesslayer.ReportQueryRsIterator.<init>(ReportQueryRsIterator.java:44)
        at 
org.apache.ojb.broker.core.ReportRsIteratorFactoryImpl.createRsIterator(ReportRsIteratorFactoryImpl.java:59)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(PersistenceBrokerImpl.java:2073)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorFromQuery(PersistenceBrokerImpl.java:2120)
        at 
org.apache.ojb.broker.core.PersistenceBrokerImpl.getReportQueryIteratorByQuery(PersistenceBrokerImpl.java:2047)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIteratorByQuery(DelegatingPersistenceBroker.java:362)
        at 
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getReportQueryIteratorByQuery(DelegatingPersistenceBroker.java:362)
        at com.webify.prototype.Driver.scenario4(Driver.java:124)
        at com.webify.prototype.Driver.run(Driver.java:65)
        at com.webify.prototype.Driver.main(Driver.java:46)
===[END error from Query#2]===

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to