Hello, I am using OJB current CVS.
Consider the data model from the junit tests: Zoo has a 1-n relation to InterfaceAnimal, which has two concrete Subclasses Mammal and Reptile. I want to execute a query for all Zoos that have an animal named "xxx", and I want to use nested queries. (I know that in this special case I could do Criteria.addEqual("animals.name", "xxx"), but I will need a more complex subquery later.) This results in the appended stacktrace. Appended you find a junit test to reproduce the problem. Could you please tell me the intended behaviour? Is such a query supposed to work? Thank you, Olli --------------------------------- snip -------------------------------------- 1) testQuery(org.apache.ojb.broker.NestedQueryTest)java.lang.NullPointerExcepti on at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCode( SqlQueryStatement.java:1635) at java.util.HashMap.hash(HashMap.java:257) at java.util.HashMap.put(HashMap.java:375) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQue ryStatement.java:1348) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryState ment.java:120) at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelectSta tement.java:86) at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel ectStatement(SqlGeneratorDefaultImpl.java:177) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(SqlQu eryStatement.java:716) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(SqlQ ueryStatement.java:701) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria(Sql QueryStatement.java:562) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(SqlQu eryStatement.java:630) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(SqlQ ueryStatement.java:680) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(SqlQu eryStatement.java:466) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(SqlQuer yStatement.java:402) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClause(Sq lQueryStatement.java:360) at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(SqlSel ectStatement.java:253) at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel ectStatement(SqlGeneratorDefaultImpl.java:178) at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccessImpl .java:265) at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:199) at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIterator FactoryImpl.java:95) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Pers istenceBrokerImpl.java:2380) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Persis tenceBrokerImpl.java:1716) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1343) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1515) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1551) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1540) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery( DelegatingPersistenceBroker.java:317) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery( DelegatingPersistenceBroker.java:317) at org.apache.ojb.broker.NestedQueryTest.testQuery(NestedQueryTest.java:50) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at com.intellij.rt.execution.junit.TextTestRunner.main(TextTestRunner.java:12) rethrown as org.apache.ojb.broker.PersistenceBrokerException at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1522) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1551) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getCollectionByQuery(Persis tenceBrokerImpl.java:1540) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery( DelegatingPersistenceBroker.java:317) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getCollectionByQuery( DelegatingPersistenceBroker.java:317) at org.apache.ojb.broker.NestedQueryTest.testQuery(NestedQueryTest.java:50) --------------------------------- snip -------------------------------------- /* * User: om */ package org.apache.ojb.broker; import junit.framework.TestCase; import org.apache.ojb.broker.query.Criteria; import org.apache.ojb.broker.query.Query; import org.apache.ojb.broker.query.QueryFactory; import java.util.Collection; /** * @author <a href="mailto:[EMAIL PROTECTED]">Oliver Matz</a> * @version $Id$ */ public class NestedQueryTest extends TestCase { private PersistenceBroker broker; public NestedQueryTest(String name) { super(name); } public void setUp() throws Exception { broker = PersistenceBrokerFactory.defaultPersistenceBroker(); } public void tearDown() { broker.close(); } public void testQuery() { Criteria animalCrit = new Criteria(); animalCrit.addEqualTo("name", "xxx"); Query animalQuery = QueryFactory.newQuery(InterfaceAnimal.class, animalCrit); Collection results = broker.getCollectionByQuery(animalQuery); // works fine System.out.println("results: " + results); Criteria zooCrit = new Criteria(); zooCrit.addIn("animals", animalQuery); Query zooQuery = QueryFactory.newQuery(Zoo.class, zooCrit); results = broker.getCollectionByQuery(zooQuery); } } -- Dr. Oliver Matz ppi Media GmbH Deliusstraße 10 D-24114 Kiel phone +49 (0) 43 1-53 53-422 fax +49 (0) 43 1-53 53-2 22 email mailto:[EMAIL PROTECTED] web www.ppi.de --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]