the NPE is caused by a classdescriptor without a table. in SqlQueryStatement:
TableAlias(ClassDescriptor aCld, String anAlias, boolean lookForExtents,List hints)
{
this.cld = aCld;
this.table = aCld.getFullTableName(); <<<<<
this.alias = anAlias;
boolean useHintsOnExtents = false;
...could you please try to provide further information about the classdescriptor ?
jakob
Coup, Robert Muir wrote:
Hi all,
I have a complicated situation which I have run into using proxies and interfaces...
Classes: Interface Group Interface StudentGroup extends Group Interface StaffGroup extends Group Class GroupImpl implements Group Class StudentGroupImpl extends GroupImpl implements StudentGroup Class StaffGroupImpl extends GroupImpl implements StaffGroup
Repository:
<class-descriptor class="Group">
<extent-class class-ref="GroupImpl"/>
<extent-class class-ref="StaffGroup"/>
<extent-class class-ref="StudentGroup"/>
</class-descriptor>
<class-descriptor class="GroupImpl" table="PaperGroup"
proxy="dynamic">
.... Fields ...
<collection-descriptor name="membership" element-class-ref="AbstractEntity"
auto-retrieve="true"
auto-update="false"
indirection-table="Group_AbstractEntity"
>
<fk-pointing-to-this-class column="id_Group"/>
<fk-pointing-to-element-class column="id_AbstractEntity"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="StaffGroup">
<extent-class class-ref="StaffGroupImpl"/>
</class-descriptor>
<class-descriptor class="StaffGroupImpl" table="PaperGroup"
proxy="dynamic">
.... Fields ...
<collection-descriptor name="membership" element-class-ref="AbstractEntity"
auto-retrieve="true"
auto-update="false"
indirection-table="Group_AbstractEntity"
>
<fk-pointing-to-this-class column="id_Group"/>
<fk-pointing-to-element-class column="id_AbstractEntity"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="StudentGroup">
<extent-class class-ref="StudentGroupImpl"/>
</class-descriptor>
<class-descriptor class="StudentGroupImpl" table="PaperGroup"
proxy="dynamic">
.... Fields ...
<collection-descriptor name="membership" element-class-ref="AbstractEntity"
auto-retrieve="true"
auto-update="false"
indirection-table="Group_AbstractEntity"
>
<fk-pointing-to-this-class column="id_Group"/>
<fk-pointing-to-element-class column="id_AbstractEntity"/>
</collection-descriptor>
</class-descriptor>
One question - is what I've done the 'right' way to map this? Or should it be more like the following? <class-descriptor class="Group"> <extent-class class-ref="GroupImpl"/> </class-descriptor> <class-descriptor class="GroupImpl"> <extent-class class-ref="StaffGroup"/> <extent-class class-ref="StudentGroup"/> </class-descriptor>
My way seems to work okay for queries and operations, except the
following. I have another object (Paper) that uses a QueryCustomizer on
a collection to find Groups which don't belong to other Groups (ie. Are
Top-Level Groups). It is also proxied dynamically.
public Query customizeQuery(Object anObject, PersistenceBroker
aBroker, CollectionDescriptor aCod, QueryByCriteria aQuery) {
ReportQueryByCriteria subQuery;
Criteria subCrit = new Criteria();
Criteria crit = new Criteria();
subCrit.addEqualToField("membership.id",
Criteria.PARENT_QUERY_PREFIX + "id");
subQuery = QueryFactory.newReportQuery(Group.class, subCrit);
subQuery.setColumns(new String[] { "membership.id" });
subQuery.setDistinct(true);
aQuery.getCriteria().addNotIn("id", subQuery);
return aQuery;
}
When the Paper is resolved I get the following:
[org.apache.ojb.broker.accesslayer.IndirectionHandler] ERROR: Method invoking failed for method *getTitle* on object null org.apache.ojb.broker.PersistenceBrokerException: java.lang.NullPointerException org.apache.ojb.broker.PersistenceBrokerException: org.apache.ojb.broker.PersistenceBrokerException: java.lang.NullPointerException at org.apache.ojb.broker.accesslayer.IndirectionHandler.materializeSubject( IndirectionHandler.java:345) at org.apache.ojb.broker.accesslayer.IndirectionHandler.getRealSubject(Indi rectionHandler.java:309) at org.apache.ojb.broker.accesslayer.IndirectionHandler.invoke(IndirectionH andler.java:284) at $Proxy5.getTitle(Unknown Source) at nz.ac.auckland.markit.netbeans.nodes.PaperNode.<init>(PaperNode.java:93) at nz.ac.auckland.markit.netbeans.modules.logindialog.ConnectionManager.loa dPapers(ConnectionManager.java:123) at nz.ac.auckland.markit.netbeans.modules.logindialog.ConnectionManager$1.r un(ConnectionManager.java:103) at java.lang.Thread.run(Thread.java:534) Caused by: org.apache.ojb.broker.PersistenceBrokerException: java.lang.NullPointerException at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Que ryReferenceBroker.java:250) at org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollection(Query ReferenceBroker.java:537) at org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollections(Quer yReferenceBroker.java:695) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getDBObject(Persistence BrokerImpl.java:1089) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByIdentity(Per sistenceBrokerImpl.java:1145) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdenti ty(DelegatingPersistenceBroker.java:296) at org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByIdenti ty(DelegatingPersistenceBroker.java:296) at org.apache.ojb.broker.accesslayer.IndirectionHandler.materializeSubject( IndirectionHandler.java:334) ... 7 more Caused by: java.lang.NullPointerException at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias.hashC ode(SqlQueryStatement.java:1913) 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(Sq lQueryStatement.java:1614) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(SqlQueryS tatement.java:155) at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(SqlSelec tStatement.java:104) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getSubQuerySQL(S qlQueryStatement.java:915) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSubQuery(S qlQueryStatement.java:890) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendParameter( SqlQueryStatement.java:875) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendInCriteria (SqlQueryStatement.java:727) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendCriteria(S qlQueryStatement.java:791) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendSQLClause( SqlQueryStatement.java:854) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.asSQLStatement(S qlQueryStatement.java:631) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendClause(Sql QueryStatement.java:557) at org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.appendWhereClaus e(SqlQueryStatement.java:509) at org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.getStatement(Sq lSelectStatement.java:271) at org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPrepare dSelectStatement(SqlGeneratorDefaultImpl.java:197) at org.apache.ojb.broker.accesslayer.JdbcAccessImpl.executeQuery(JdbcAccess Impl.java:314) at org.apache.ojb.broker.accesslayer.RsQueryObject.performQuery(RsQueryObje ct.java:113) at org.apache.ojb.broker.accesslayer.RsIterator.<init>(RsIterator.java:211) at org.apache.ojb.broker.core.RsIteratorFactoryImpl.createRsIterator(RsIter atorFactoryImpl.java:97) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery( PersistenceBrokerImpl.java:1637) at org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Pe rsistenceBrokerImpl.java:1119) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Que ryReferenceBroker.java:143) at org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Que ryReferenceBroker.java:242) ... 14 more
Ideas? Trying the other mapping method didn't seem to work better... I'm using CVS HEAD as of today... Thanks for your help,
Rob.
--------------------------------------------------------------------- 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]
