I don't know if this is related to your issue, but as an FYI you might want to read through this thread.
http://mail-archives.apache.org/mod_mbox/cayenne-user/200706.mbox/[EMAIL PROTECTED] On 8/20/07, Jens Mayer <[EMAIL PROTECTED]> wrote: > Hi, > > I'm trying to build a tree-like structure based on data in my db. > > My table TMP_TRANSEDIT has a relationship to itself: > > TMPTRANSEDIT_ID NUMBER(10) is the PK ... and > TMPTRANSEDIT_TMPTRANSEDIT_ID NUMBER(10) is used for the relationship to > the parent. > > The tabledata is inserted by two queries, first the insert-query for the > rows and afterwards an update-query to set the parent/child relationship. > After that, all modifications are committed. > > Now I'm querying each node (in the same DataContext I used for the > inserts/updates), starting with the root-tier > (TMPTRANSEDIT_TMPTRANSEDIT_ID is null) > > Upto this point all is working fine. > > But now I'm trying to read the childs for each rootnode (triggered by > the user expanding the related node in the GUI). I'm using the > ObjectRelationship toTmpTranseditArray which should contain the > child-DataObjects for each given rootnode. But the List returned by the > getToTmpTranseditArray()-Method is empty. The logging shows that after > the rootnodes-query there is no further query performed. > > Am I wrong with my approach? Or do I have to consider something special > to Cayenne? One possible solution is to query the childs for each node > manually by using a new SelectQuery, but this doesn't seem to be the > best practice to me... > > Below I added the code of the child-query and the mapping from the > map.xml concerning the TMP_TRANSEDIT-Table. > > I'm using Cayenne 2.0.2, JDK 1.5.0_10 and Oracle 10.2.0.3.0. > > Thanks in advance, > > Jens > > This the code of my child-query: > > public boolean hasChildren(Object element) { > TmpTransedit trans = (TmpTransedit)element; > List children = trans.getTmpTranseditArray(); > int size = children.size(); > return size>0; > } > > This is the mapping for the DB-Table: > <db-entity name="TMP_TRANSEDIT"> > <db-attribute name="ERROR_CODE" type="INTEGER" length="5"/> > <db-attribute name="IDENT_KEY" type="VARCHAR" length="30"/> > <db-attribute name="IDENT_NAME" type="VARCHAR" length="40"/> > <db-attribute name="KNZ_REAKTION" type="VARCHAR" length="1"/> > <db-attribute name="MACHINE_NAME" type="VARCHAR" length="50"/> > <db-attribute name="SATZART" type="VARCHAR" isMandatory="true" > length="20"/> > <db-attribute name="SENDATEI_SENDATEI_ID" type="INTEGER" length="10"/> > <db-attribute name="TMPTRANSEDIT_ID" type="INTEGER" > isPrimaryKey="true" isMandatory="true" length="10"/> > <db-attribute name="TMPTRANSEDIT_TMPTRANSEDIT_ID" type="INTEGER" > length="10"/> > <db-attribute name="USER_NAME" type="VARCHAR" length="50"/> > <db-key-generator> > <db-generator-type>ORACLE</db-generator-type> > <db-generator-name>TMPTRANSEDIT_SEQ</db-generator-name> > <db-key-cache-size>1</db-key-cache-size> > </db-key-generator> > </db-entity> > > ... the ObjectEntity > <obj-entity name="TmpTransedit" > className="de.edeka.ebus.dc.db.TmpTransedit" dbEntityName="TMP_TRANSEDIT"> > <obj-attribute name="errorCode" type="java.lang.Integer" > db-attribute-path="ERROR_CODE"/> > <obj-attribute name="identKey" type="java.lang.String" > db-attribute-path="IDENT_KEY"/> > <obj-attribute name="identName" type="java.lang.String" > db-attribute-path="IDENT_NAME"/> > <obj-attribute name="knzReaktion" type="java.lang.String" > db-attribute-path="KNZ_REAKTION"/> > <obj-attribute name="machineName" type="java.lang.String" > db-attribute-path="MACHINE_NAME"/> > <obj-attribute name="satzart" type="java.lang.String" > db-attribute-path="SATZART"/> > <obj-attribute name="userName" type="java.lang.String" > db-attribute-path="USER_NAME"/> > </obj-entity> > > ... the db-relationships > <db-relationship name="tmpTranseditArray" source="TMP_TRANSEDIT" > target="TMP_TRANSEDIT" toMany="true"> > <db-attribute-pair source="TMPTRANSEDIT_ID" > target="TMPTRANSEDIT_TMPTRANSEDIT_ID"/> > </db-relationship> > > <db-relationship name="toSenDateien" source="TMP_TRANSEDIT" > target="SEN_DATEIEN" toMany="false"> > <db-attribute-pair source="SENDATEI_SENDATEI_ID" target="SENDATEI_ID"/> > </db-relationship> > > <db-relationship name="toTmpAttreditArray" source="TMP_TRANSEDIT" > target="TMP_ATTREDIT" toMany="true"> > <db-attribute-pair source="TMPTRANSEDIT_ID" > target="TMPTRANSEDIT_TMPTRANSEDIT_ID"/> > </db-relationship> > > <db-relationship name="toTmpTransedit" source="TMP_TRANSEDIT" > target="TMP_TRANSEDIT" toMany="false"> > <db-attribute-pair source="TMPTRANSEDIT_TMPTRANSEDIT_ID" > target="TMPTRANSEDIT_ID"/> > </db-relationship> > > ... and the obj-relationships > <obj-relationship name="tmpTranseditArray" source="TmpTransedit" > target="TmpTransedit" db-relationship-path="tmpTranseditArray"/> > <obj-relationship name="toDatei" source="TmpTransedit" target="Datei" > db-relationship-path="toSenDateien"/> > <obj-relationship name="toTmpAttreditArray" source="TmpTransedit" > target="TmpAttredit" db-relationship-path="toTmpAttreditArray"/> > <obj-relationship name="toTmpTransedit" source="TmpTransedit" > target="TmpTransedit" db-relationship-path="toTmpTransedit"/> > > >
