Jakob Braeuchi wrote:

hi armin, joshua,

the problem here is the class-descriptor of the sub-query. it's referencing an interface. handling of interfaces in 'normal' queries is done in PBImpl where one select is fired for each concrete class (or table).

I modify the query an the used metadata to use only real classes, but I don't get it work. Should this query pass when only "real" classes are used?



the sub-query handling is not done in PBImpl, so i'm not even sure if we can handle extents for sub-queries ?


I'm not familiar with the query stuff, so my amateurish question is why not do sub-queries in PB or with PB argument in "sub query method".
Isn't it similar to the "queryByExample" problem? We need metadata information when building sql-query, so the Criteria/Query need an PB instance to extract all needed information?


regards,
Armin


jakob

Armin Waibel schrieb:

Add new test in test suite to reproduce this problem.

regards,
Armin

Phillips, Joshua (NIH/NCI) wrote:

I think that it is a valid way of constructing a query. As I understand, one
should be able to nest a ReportQueryByCriteria within a QueryByCriteria as
long as the nested report query selects only one attribute.


So, yes. I think that this is accurately reproducing the problem.

Regards,

Joshua Phillips
Contractor (SAIC)
Tel: 301 451 6346
Fax: 301 480 4222
[EMAIL PROTECTED]

-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED]
Sent: Monday, August 23, 2004 7:23 AM
To: OJB Users List
Subject: Re: SqlQueryStatement.splitCriteria -> NullPointerException

Hi,

I think my test was too simple to reproduce your problem. I modified
QueryTest#testReportQueryExtent and do the query against an abstract
class. This test pass. But you additionally do a sub-Query.
Modified my test again and now I can reproduce your problem:

Criteria critMain = new Criteria();
Criteria critSub = new Criteria();

critSub.addLike("articleName", "%o%");
ReportQueryByCriteria querySub =
QueryFactory.newReportQuery(AbstractArticle.class, critSub);
querySub.setAttributes(new String[] { "articleId"});

critMain.addIn("productGroup.groupId", querySub);
ReportQueryByCriteria queryMain =
QueryFactory.newReportQuery(AbstractProductGroup.class, critMain);

Iterator iter = broker.getReportQueryIteratorByQuery(queryMain);

The query itself doesn't make any sense I only want to provoke the NPE.

This test cause an NPE:

testReportQueryAbstractClassWithExtent(org.apache.ojb.broker.QueryTest)jav

a.lang.NullPointerException
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashCod


e(SqlQueryStatement.java:1974)
at java.util.HashMap.hash(HashMap.java:261)
at java.util.HashMap.put(HashMap.java:379)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(SqlQ


ueryStatement.java:1683)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQuerySta


tement.java:132)


I'm not really familiar with the PB-query generation, so is this query valid and does it reproduce your problem?

regards,
Armin


Phillips, Joshua (NIH/NCI) wrote:


Hi Armin,

Thanks for taking the time to write a test.

BaseInterface is just an interface. So, it declares only BaseImpl as an
extent-class. BaseImpl declares all attributes (include



ojbConcreteClass)

and associations. It also declares AImpl as an extent class.

Could you please email me that test-case, or at least a snippet. Maybe



I'm

missing something.

Thanks again.

Joshua Phillips
Contractor (SAIC)
Tel: 301 451 6346
Fax: 301 480 4222
[EMAIL PROTECTED]



-----Original Message-----
From: Armin Waibel [mailto:[EMAIL PROTECTED]
Sent: Saturday, August 21, 2004 6:21 AM
To: OJB Users List
Subject: Re: SqlQueryStatement.splitCriteria -> NullPointerException

Hi Jakob, Joshua,

made a test with a modified version of QueryTest#testReportQueryExtent
against AbstractArticle.class. This test pass. Maybe BaseInterface.class
did not declare extents in repository?


regards,
Armin

J.Braeuchi wrote:


hi joshua,

what version of ojb are you using ?
is it ok to use hashcode 0 if no table is available.

jakob

Phillips, Joshua (NIH/NCI) schrieb:



The collection-descriptor for an abstract class does not have a table
attribute. So, when SqlQueryStatement.splitCriteria is called, a
NullPointerException is thrown when it tries to put the root
TableAlias into
the m_jointTreeToCriteria HashMap, because
SqlQueryStatement.TableAlias.hashCode looks like this:


      public int hashCode() {
          return table.hashCode();
      }

...and table is null.

The code that I used to produce this error looks like this:

PersistenceBroker pb = PersistenceBrokerFactory
  .defaultPersistenceBroker();
Criteria subCrit = new Criteria();
subCrit.addEqualTo("id", new Long(1));
ReportQueryByCriteria assocPBQ = QueryFactory.newReportQuery(
  BaseInterface.class, subCrit);
assocPBQ.setAttributes(new String[] { "id" });
Criteria crit = new Criteria();
crit.addIn("base.id", assocPBQ);
QueryByCriteria q = (QueryByCriteria) QueryFactory.newQuery(
  BaseAssocInterface.class, crit, true);
Collection c = pb.getCollectionByQuery(q);

The stack trace looks like this:

Caused by: java.lang.NullPointerException
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashC





od

e(


Unknown Source)
  at java.util.HashMap.hash(HashMap.java:261)
  at java.util.HashMap.put(HashMap.java:379)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Un





kn

ow


n Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown


Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknow





n

Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(U





nk

no


wn Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(U





nk

no


wn Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter(





Un

kn


own Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria





(U

nk


nown Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(U





nk

no


wn Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause(





Un

kn


own Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(U





nk

no


wn Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(Unk





no

wn


Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClaus





e(

Un


known Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(Un





kn

ow


n Source)
  at


org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPrepare





dS

el


ectStatement(Unknown Source)
at
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(Unknown


Source)
at
org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(Unknown


Source)
  at org.apache.ojb.broker.accesslayer.RsIterator.<init>(Unknown
Source)
  at


org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(Unknow





n

Source)
  at


org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(





Un

kn


own Source)
  at


org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Un





kn

ow


n Source)
  at


org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unk





no

wn


Source)
  ... 20 more

Joshua Phillips
Contractor (SAIC)
Tel: 301 451 6346
Fax: 301 480 4222
[EMAIL PROTECTED]

---------------------------------------------------------------------

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





---------------------------------------------------------------------


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




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




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




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




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




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



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




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



Reply via email to