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 Christopher Lowe <c_...@caribsurf.com> on 2006/02/02 22:24:33 UTC
Exception in buildSuperJoinTree() - java.lang.NullPointerException
Hi All,
I have the following relationship. A Supplier has several
products (Rooms) and each product has several rates. Room is a Product hence
an inheritance relationship between them. The mappings are defined below.
I'm trying to perform a simple query to return the suppliers with products
where the net rate is not null. The code snippet is defined below. However
I get a NullPointerException when query is being built. The stack trace is
also defined below.
Regards,
Chris.
Code Snippet:
broker = PersistenceBrokerFactory.defaultPersistenceBroker();
QueryByCriteria query = new QueryByCriteria(Supplier.class,
null);
Criteria criteria = new Criteria();
criteria.addNotNull("products.rates.net");
query.setCriteria(criteria);
query.addOrderByAscending("name");
results = (List) broker.getCollectionByQuery(query);
Mappings:
<class-descriptor class="com.dm.beans.Supplier" table="supplier">
<field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false" autoincrement="true"/>
<field-descriptor name="registrationDate" column="REGDATE"
jdbc-type="DATE" />
<field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
<field-descriptor name="contact" column="CONTACT" jdbc-type="VARCHAR" />
<field-descriptor name="email" column="EMAIL" jdbc-type="VARCHAR" />
<field-descriptor name="phone" column="PHONE" jdbc-type="VARCHAR" />
<field-descriptor name="fax" column="FAX" jdbc-type="VARCHAR" />
<field-descriptor name="active" column="ACTIVE" jdbc-type="BIT" />
<collection-descriptor
name="products"
collection-class="org.apache.ojb.broker.util.collections.RemovalAwareList"
element-class-ref="com.dm.beans.Room"
auto-update="true"
auto-delete="true"
proxy="true"
>
<orderby name="name" sort="ASC"/>
<inverse-foreignkey field-ref="supplierId"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="com.dm.beans.Product" table="product">
<field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false" autoincrement="true"/>
<field-descriptor name="supplierId" column="SUPPLIER_ID"
jdbc-type="INTEGER"/>
<field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
</class-descriptor>
<class-descriptor class="com.dm.beans.Room" table="room">
<field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false"/>
<field-descriptor name="quantity" column="QUANTITY" jdbc-type="INTEGER"
/>
<field-descriptor name="allocation" column="ALLOCATION"
jdbc-type="INTEGER" />
<field-descriptor name="capacity" column="CAPACITY" jdbc-type="INTEGER"
/>
<reference-descriptor
name="super"
class-ref="com.dm.beans.Product"
>
<foreignkey field-ref="id"/>
</reference-descriptor>
<collection-descriptor
name="rates"
collection-class="org.apache.ojb.broker.util.collections.RemovalAwareList"
element-class-ref="com.dm.beans.Rate"
auto-update="true"
auto-delete="true"
proxy="true"
>
<inverse-foreignkey field-ref="productId"/>
</collection-descriptor>
</class-descriptor>
<class-descriptor class="com.dm.beans.Rate" table="room_rate">
<field-descriptor name="id" column="ID" jdbc-type="INTEGER"
primarykey="true" nullable="false" autoincrement="true"/>
<field-descriptor name="productId" column="ROOM_ID" jdbc-type="INTEGER"
/>
<field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
<field-descriptor name="startDate" column="START_DATE" jdbc-type="DATE"
/>
<field-descriptor name="endDate" column="END_DATE" jdbc-type="DATE" />
<field-descriptor name="net" column="NET" jdbc-type="DOUBLE" />
</class-descriptor>
Stack Trace:
java.lang.NullPointerException
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildSuperJoinTree(U
nknown Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getTableAlias(Unknow
n Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTreeForColu
mn(Unknown Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Unknow
n Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Unknow
n Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown
Source)
at
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel
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(Unknown
Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unkn
own Source)
at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknow
n Source)
at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
Source)
Re: Exception in buildSuperJoinTree() - java.lang.NullPointerException
Posted by Armin Waibel <ar...@apache.org>.
Hi Chris,
Christopher Lowe wrote:
> Hi All,
> I have the following relationship. A Supplier has several
> products (Rooms) and each product has several rates. Room is a Product hence
> an inheritance relationship between them. The mappings are defined below.
> I'm trying to perform a simple query to return the suppliers with products
> where the net rate is not null. The code snippet is defined below. However
> I get a NullPointerException when query is being built. The stack trace is
> also defined below.
>
Seems you stumble across another bug.
I made a bug report
https://issues.apache.org/jira/browse/OJB-94
and add a new test to reproduce your problem
(..broker.InheritanceMultipleTableTest#testQuery_2)
I assume the bug is specific for "table-per-subclass"-inheritance used
in 'Room' class.
Thanks again for the detailed description.
regards,
Armin
> Regards,
> Chris.
>
> Code Snippet:
>
> broker = PersistenceBrokerFactory.defaultPersistenceBroker();
>
> QueryByCriteria query = new QueryByCriteria(Supplier.class,
> null);
>
> Criteria criteria = new Criteria();
> criteria.addNotNull("products.rates.net");
>
> query.setCriteria(criteria);
> query.addOrderByAscending("name");
>
> results = (List) broker.getCollectionByQuery(query);
>
> Mappings:
>
> <class-descriptor class="com.dm.beans.Supplier" table="supplier">
> <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
> primarykey="true" nullable="false" autoincrement="true"/>
> <field-descriptor name="registrationDate" column="REGDATE"
> jdbc-type="DATE" />
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
> <field-descriptor name="contact" column="CONTACT" jdbc-type="VARCHAR" />
> <field-descriptor name="email" column="EMAIL" jdbc-type="VARCHAR" />
> <field-descriptor name="phone" column="PHONE" jdbc-type="VARCHAR" />
> <field-descriptor name="fax" column="FAX" jdbc-type="VARCHAR" />
> <field-descriptor name="active" column="ACTIVE" jdbc-type="BIT" />
> <collection-descriptor
> name="products"
>
> collection-class="org.apache.ojb.broker.util.collections.RemovalAwareList"
> element-class-ref="com.dm.beans.Room"
> auto-update="true"
> auto-delete="true"
> proxy="true"
> >
> <orderby name="name" sort="ASC"/>
> <inverse-foreignkey field-ref="supplierId"/>
> </collection-descriptor>
> </class-descriptor>
>
> <class-descriptor class="com.dm.beans.Product" table="product">
> <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
> primarykey="true" nullable="false" autoincrement="true"/>
> <field-descriptor name="supplierId" column="SUPPLIER_ID"
> jdbc-type="INTEGER"/>
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
> </class-descriptor>
>
> <class-descriptor class="com.dm.beans.Room" table="room">
> <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
> primarykey="true" nullable="false"/>
> <field-descriptor name="quantity" column="QUANTITY" jdbc-type="INTEGER"
> />
> <field-descriptor name="allocation" column="ALLOCATION"
> jdbc-type="INTEGER" />
> <field-descriptor name="capacity" column="CAPACITY" jdbc-type="INTEGER"
> />
> <reference-descriptor
> name="super"
> class-ref="com.dm.beans.Product"
> >
> <foreignkey field-ref="id"/>
> </reference-descriptor>
> <collection-descriptor
> name="rates"
>
> collection-class="org.apache.ojb.broker.util.collections.RemovalAwareList"
> element-class-ref="com.dm.beans.Rate"
> auto-update="true"
> auto-delete="true"
> proxy="true"
> >
> <inverse-foreignkey field-ref="productId"/>
> </collection-descriptor>
> </class-descriptor>
>
> <class-descriptor class="com.dm.beans.Rate" table="room_rate">
> <field-descriptor name="id" column="ID" jdbc-type="INTEGER"
> primarykey="true" nullable="false" autoincrement="true"/>
> <field-descriptor name="productId" column="ROOM_ID" jdbc-type="INTEGER"
> />
> <field-descriptor name="name" column="NAME" jdbc-type="VARCHAR" />
> <field-descriptor name="startDate" column="START_DATE" jdbc-type="DATE"
> />
> <field-descriptor name="endDate" column="END_DATE" jdbc-type="DATE" />
> <field-descriptor name="net" column="NET" jdbc-type="DOUBLE" />
> </class-descriptor>
>
>
> Stack Trace:
>
> java.lang.NullPointerException
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildSuperJoinTree(U
> nknown Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.getTableAlias(Unknow
> n Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTreeForColu
> mn(Unknown Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.buildJoinTree(Unknow
> n Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.splitCriteria(Unknow
> n Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
> Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement.<init>(Unknown
> Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlSelectStatement.<init>(Unknown
> Source)
> at
> org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.getPreparedSel
> 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(Unknown
> Source)
> at
> org.apache.ojb.broker.core.PersistenceBrokerImpl.getRsIteratorFromQuery(Unkn
> own Source)
> at
> org.apache.ojb.broker.core.PersistenceBrokerImpl.getIteratorFromQuery(Unknow
> n Source)
> at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown
> Source)
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org