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)
 

Reply via email to