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