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"/>


Reply via email to