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)