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 ad...@netspace.net.au on 2004/09/12 07:07:31 UTC

toNCollectionPrefetcher.associateBatched NullPointer



Hi All,

I'm firing this at both lists as I can't figure out whether it's a bug in the
code or my mapping.

I'm trying to accomplish a pretty simple mn relationship (user/group type
arrangement).   The mapping file for the section in question is attached below.
 I have some test data (also below, in dbunit dataset format) which I've
verified in the database and everytime I try to load a group it throws a null
pointer at me.  Any assistance would be appreciated.  Let me know if you would
like any more information.


:Mapping File:

       <class-descriptor
                class="com.interlinkj.ac.User"
                table="USERS"
        row-reader="com.interlinkj.db.UserRowReader">
                <field-descriptor
                        name="id"
                        column="id"
                        jdbc-type="INTEGER"
                        primarykey="true"
                        autoincrement="true"/>
                <field-descriptor
                        name="firstName"
                        column="firstname"
                        jdbc-type="VARCHAR"
            nullable="false"/>
                <field-descriptor
                        name="lastName"
                        column="lastname"
                        jdbc-type="VARCHAR"
            nullable="false"/>
                <field-descriptor
                        name="userName"
                        column="username"
                        jdbc-type="VARCHAR"
            nullable="false"/>
                <field-descriptor
                        name="passwordHash"
                        column="credentials"
                        jdbc-type="VARCHAR"
            nullable="false"/>
                <collection-descriptor
                name="groups"
                element-class-ref="com.interlinkj.ac.Group"
                indirection-table="USER_GROUP_LINK"
                auto-delete="link"
                auto-update="object"
            auto-retrieve="true"
            orderby="id"
            sort="ASC"
        >
         <fk-pointing-to-this-class column="user_id"/>
         <fk-pointing-to-element-class column="group_id"/>
        </collection-descriptor>
        </class-descriptor>

        <class-descriptor
                class="com.interlinkj.ac.Group"
                table="GROUPS"
        row-reader="com.interlinkj.db.GroupRowReader">
                        <field-descriptor
                                name="id"
                                column="id"
                                jdbc-type="INTEGER"
                                primarykey="true"
                                autoincrement="true"/>
                        <field-descriptor
                                name="name"
                                column="name"
                                jdbc-type="VARCHAR"
                nullable="false"/>
            <field-descriptor
                name="description"
                column="description"
                jdbc-type="VARCHAR"
                nullable="true"/>
            <field-descriptor
                name="type"
                column="type"
                jdbc-type="VARCHAR"
                nullable="false"
                conversion="com.interlinkj.db.GroupTypeConversion"/>
            <collection-descriptor
                name="users"
                element-class-ref="com.interlinkj.ac.User"
                indirection-table="USER_GROUP_LINK"
                auto-delete="link"
                auto-update="object"
                auto-retrieve="true"
                orderby="id"
                sort="ASC"
            >
                 <fk-pointing-to-this-class column="group_id"/>
                 <fk-pointing-to-element-class column="user_id"/>
            </collection-descriptor>
        </class-descriptor>

:Test Data (for those not familiar with DBUnit, the element name is the table,
the attributes are the columns, and each element represents a row [in order]):

<dataset>
      <GROUPS id="1" type="Designer Group" name="Designer Group"
description="This is a designer group."/>
      <GROUPS id="2" type="Data Entry Group" name="Data Entry Group"
description="This is a data entry group."/>
      <USERS id="1" firstname="Bernard" lastname="Black" username="blblack"
credentials="jamjamjam"/>
      <USERS id="2" firstname="Manny" lastname="Bianco" username="manny"
credentials="brilliant"/>
      <USER_GROUP_LINK group_id="1" user_id="1"/>
      <USER_GROUP_LINK group_id="2" user_id="2"/>
</dataset>


:Stack Trace:

java.lang.NullPointerException
        at
org.apache.ojb.broker.accesslayer.MtoNCollectionPrefetcher.associateBatched(Unknown
Source)
        at
org.apache.ojb.broker.accesslayer.MtoNCollectionPrefetcher.prefetchRelationship(Unknown
Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Unknown
Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollection(Unknown Source)
        at
org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollections(Unknown Source)
        at
org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unknown Source)
        at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
        at
org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(Unknown Source)
        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(Unknown
Source)
        at
org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(Unknown
Source)
        at com.interlinkj.db.DatabaseManager.loadByFieldValue(Unknown Source)
        at com.interlinkj.db.GroupManager.loadById(Unknown Source)
        at com.interlinkj.db.TestGroupManager.testLoadWithIndividualUser(Unknown
Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at junit.framework.TestCase.runTest(TestCase.java:154)
        at junit.framework.TestCase.runBare(TestCase.java:127)


:Calling Code:

            Criteria crit = new Criteria();
            crit.addEqualTo("id", new Integer(1));
            Query q = newQuery(Group.class, crit);
            broker = newPersistenceBroker(); //just a helper method to default
broker
            Object tmp = broker.getObjectByQuery(q);

            //Null pointer before it gets here

            if(tmp == null){
                throw new FindException(
                    getShortClassName(clazzToLoad) +
                    " with " +
                    fieldName +
                    " of " +
                    fieldValue +
                    " does not exist."
                );
            }
            return (T)tmp;




------------------------------------------------------------
This email was sent from Netspace Webmail: http://www.netspace.net.au


---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org


Re: toNCollectionPrefetcher.associateBatched NullPointer

Posted by Jakob Braeuchi <jb...@gmx.ch>.
hi,

what version of ojb are you using ? could you please provide the line number 
where the npe occurs ?

jakob

adamandeve@netspace.net.au schrieb:

> 
> 
> Hi All,
> 
> I'm firing this at both lists as I can't figure out whether it's a bug in the
> code or my mapping.
> 
> I'm trying to accomplish a pretty simple mn relationship (user/group type
> arrangement).   The mapping file for the section in question is attached below.
>  I have some test data (also below, in dbunit dataset format) which I've
> verified in the database and everytime I try to load a group it throws a null
> pointer at me.  Any assistance would be appreciated.  Let me know if you would
> like any more information.
> 
> 
> :Mapping File:
> 
>        <class-descriptor
>                 class="com.interlinkj.ac.User"
>                 table="USERS"
>         row-reader="com.interlinkj.db.UserRowReader">
>                 <field-descriptor
>                         name="id"
>                         column="id"
>                         jdbc-type="INTEGER"
>                         primarykey="true"
>                         autoincrement="true"/>
>                 <field-descriptor
>                         name="firstName"
>                         column="firstname"
>                         jdbc-type="VARCHAR"
>             nullable="false"/>
>                 <field-descriptor
>                         name="lastName"
>                         column="lastname"
>                         jdbc-type="VARCHAR"
>             nullable="false"/>
>                 <field-descriptor
>                         name="userName"
>                         column="username"
>                         jdbc-type="VARCHAR"
>             nullable="false"/>
>                 <field-descriptor
>                         name="passwordHash"
>                         column="credentials"
>                         jdbc-type="VARCHAR"
>             nullable="false"/>
>                 <collection-descriptor
>                 name="groups"
>                 element-class-ref="com.interlinkj.ac.Group"
>                 indirection-table="USER_GROUP_LINK"
>                 auto-delete="link"
>                 auto-update="object"
>             auto-retrieve="true"
>             orderby="id"
>             sort="ASC"
>         >
>          <fk-pointing-to-this-class column="user_id"/>
>          <fk-pointing-to-element-class column="group_id"/>
>         </collection-descriptor>
>         </class-descriptor>
> 
>         <class-descriptor
>                 class="com.interlinkj.ac.Group"
>                 table="GROUPS"
>         row-reader="com.interlinkj.db.GroupRowReader">
>                         <field-descriptor
>                                 name="id"
>                                 column="id"
>                                 jdbc-type="INTEGER"
>                                 primarykey="true"
>                                 autoincrement="true"/>
>                         <field-descriptor
>                                 name="name"
>                                 column="name"
>                                 jdbc-type="VARCHAR"
>                 nullable="false"/>
>             <field-descriptor
>                 name="description"
>                 column="description"
>                 jdbc-type="VARCHAR"
>                 nullable="true"/>
>             <field-descriptor
>                 name="type"
>                 column="type"
>                 jdbc-type="VARCHAR"
>                 nullable="false"
>                 conversion="com.interlinkj.db.GroupTypeConversion"/>
>             <collection-descriptor
>                 name="users"
>                 element-class-ref="com.interlinkj.ac.User"
>                 indirection-table="USER_GROUP_LINK"
>                 auto-delete="link"
>                 auto-update="object"
>                 auto-retrieve="true"
>                 orderby="id"
>                 sort="ASC"
>             >
>                  <fk-pointing-to-this-class column="group_id"/>
>                  <fk-pointing-to-element-class column="user_id"/>
>             </collection-descriptor>
>         </class-descriptor>
> 
> :Test Data (for those not familiar with DBUnit, the element name is the table,
> the attributes are the columns, and each element represents a row [in order]):
> 
> <dataset>
>       <GROUPS id="1" type="Designer Group" name="Designer Group"
> description="This is a designer group."/>
>       <GROUPS id="2" type="Data Entry Group" name="Data Entry Group"
> description="This is a data entry group."/>
>       <USERS id="1" firstname="Bernard" lastname="Black" username="blblack"
> credentials="jamjamjam"/>
>       <USERS id="2" firstname="Manny" lastname="Bianco" username="manny"
> credentials="brilliant"/>
>       <USER_GROUP_LINK group_id="1" user_id="1"/>
>       <USER_GROUP_LINK group_id="2" user_id="2"/>
> </dataset>
> 
> 
> :Stack Trace:
> 
> java.lang.NullPointerException
>         at
> org.apache.ojb.broker.accesslayer.MtoNCollectionPrefetcher.associateBatched(Unknown
> Source)
>         at
> org.apache.ojb.broker.accesslayer.MtoNCollectionPrefetcher.prefetchRelationship(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.performRetrievalTasks(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.getCollectionByQuery(Unknown Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollection(Unknown Source)
>         at
> org.apache.ojb.broker.core.QueryReferenceBroker.retrieveCollections(Unknown Source)
>         at
> org.apache.ojb.broker.accesslayer.RsIterator.getObjectFromResultSet(Unknown Source)
>         at org.apache.ojb.broker.accesslayer.RsIterator.next(Unknown Source)
>         at
> org.apache.ojb.broker.core.PersistenceBrokerImpl.getObjectByQuery(Unknown Source)
>         at
> org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(Unknown
> Source)
>         at
> org.apache.ojb.broker.core.DelegatingPersistenceBroker.getObjectByQuery(Unknown
> Source)
>         at com.interlinkj.db.DatabaseManager.loadByFieldValue(Unknown Source)
>         at com.interlinkj.db.GroupManager.loadById(Unknown Source)
>         at com.interlinkj.db.TestGroupManager.testLoadWithIndividualUser(Unknown
> Source)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at junit.framework.TestCase.runTest(TestCase.java:154)
>         at junit.framework.TestCase.runBare(TestCase.java:127)
> 
> 
> :Calling Code:
> 
>             Criteria crit = new Criteria();
>             crit.addEqualTo("id", new Integer(1));
>             Query q = newQuery(Group.class, crit);
>             broker = newPersistenceBroker(); //just a helper method to default
> broker
>             Object tmp = broker.getObjectByQuery(q);
> 
>             //Null pointer before it gets here
> 
>             if(tmp == null){
>                 throw new FindException(
>                     getShortClassName(clazzToLoad) +
>                     " with " +
>                     fieldName +
>                     " of " +
>                     fieldValue +
>                     " does not exist."
>                 );
>             }
>             return (T)tmp;
> 
> 
> 
> 
> ------------------------------------------------------------
> This email was sent from Netspace Webmail: http://www.netspace.net.au
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org