You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by ol...@ppi.de on 2003/08/01 12:11:04 UTC
nested query and polymorphism
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:om@ppi.de">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:oliver.matz@ppi.de
web www.ppi.de
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org