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]
