Hmm, I had a look at your code and did find any flaws. Did you try to ommit the collection-class entry? I think it is at least superfluous.
But I have no idea what could be wrong here, as your repository looks OK.
Thomas
Larry V. Streepy, Jr. wrote:
I'm working on a fairly simple sample program (modified from the tutorial1 code shipped with OJB) and I'm running into some unexplainable (by me :-) behavior relating to a 1:N relation.
The relationship is a simple 1:N from a Person object to a Trait object. I've attached the repository_user.xml and the source code in question.
As attached, the subordinate Trait objects are properly stamped with the OID of the Person object. However, if I uncomment the "reference-descriptor" in Trait (making it a traversable relation from Trait to Person), the Trait objects are not stamped with the Person object's OID when they are persisted. I'm sure that I just don't understand the interplay between these conditions, so if anybody can explain it, it would help a lot.
Note, you can ignore all the fields relating to timestamp, lock, lastModified, etc. They are artifacts put in by AXgen and are irrelevant.
Thanks. -- Larry V. Streepy, Jr. Senior Vice President and CTO Health Language, Inc.
------------------------------------------------------------------------
<class-descriptor class="com.staffmix.nurse.competencies.TraitImpl" table="Trait"> <field-descriptor autoincrement="true" primarykey="true" column="traOID" jdbc-type="VARCHAR" name="OID"/> <field-descriptor column="traLockTimestamp" jdbc-type="TIMESTAMP" name="lockTimestamp"/> <field-descriptor column="traLockUser" jdbc-type="VARCHAR" name="lockUser"/> <field-descriptor column="traLastModified" jdbc-type="TIMESTAMP" name="lastModified"/> <field-descriptor column="traLastModifier" jdbc-type="VARCHAR" name="lastModifier"/> <field-descriptor column="traTraitName" jdbc-type="VARCHAR" name="traitName"/> <field-descriptor column="traPersonOID" jdbc-type="VARCHAR" name="personOID"/> <!-- <reference-descriptor proxy="true" auto-delete="false" auto-retrieve="true" auto-update="false" class-ref="com.staffmix.nurse.competencies.PersonImpl" name="person"> <foreignkey field-ref="personOID"/> </reference-descriptor> --> </class-descriptor>
<class-descriptor class="com.staffmix.nurse.competencies.CompetencyImpl" table="Competency"> <field-descriptor autoincrement="true" primarykey="true" column="comOID" jdbc-type="VARCHAR" name="OID"/> <field-descriptor column="comLockTimestamp" jdbc-type="TIMESTAMP" name="lockTimestamp"/> <field-descriptor column="comLockUser" jdbc-type="VARCHAR" name="lockUser"/> <field-descriptor column="comLastModified" jdbc-type="TIMESTAMP" name="lastModified"/> <field-descriptor column="comLastModifier" jdbc-type="VARCHAR" name="lastModifier"/> <field-descriptor column="comName" jdbc-type="VARCHAR" name="name"/> <field-descriptor column="comDescription" jdbc-type="VARCHAR" name="description"/> <collection-descriptor proxy="true" collection-class="org.apache.ojb.broker.util.collections.ManageableVector" auto-delete="false" auto-retrieve="true" auto-update="false" element-class-ref="com.staffmix.nurse.competencies.PersonImpl" indirection-table="CompetencyPerson" name="persons" > <fk-pointing-to-this-class column="competencyOID"/> <fk-pointing-to-element-class column="personOID"/> </collection-descriptor> </class-descriptor>
<class-descriptor class="com.staffmix.nurse.competencies.PersonImpl" table="Person"> <field-descriptor autoincrement="true" primarykey="true" column="perOID" jdbc-type="VARCHAR" name="OID"/> <field-descriptor column="perLockTimestamp" jdbc-type="TIMESTAMP" name="lockTimestamp"/> <field-descriptor column="perLockUser" jdbc-type="VARCHAR" name="lockUser"/> <field-descriptor column="perLastModified" jdbc-type="TIMESTAMP" name="lastModified"/> <field-descriptor column="perLastModifier" jdbc-type="VARCHAR" name="lastModifier"/> <field-descriptor column="perEmpid" jdbc-type="VARCHAR" name="empid"/> <field-descriptor column="perName" jdbc-type="VARCHAR" name="name"/> <collection-descriptor proxy="true" collection-class="org.apache.ojb.broker.util.collections.ManageableVector" auto-delete="true" auto-retrieve="true" auto-update="true" element-class-ref="com.staffmix.nurse.competencies.TraitImpl" orderby="traitName" name="traits" > <inverse-foreignkey field-ref="personOID"/> </collection-descriptor> <collection-descriptor proxy="true" collection-class="org.apache.ojb.broker.util.collections.ManageableVector" auto-delete="false" auto-retrieve="true" auto-update="false" element-class-ref="com.staffmix.nurse.competencies.CompetencyImpl" indirection-table="CompetencyPerson" name="competencys" > <fk-pointing-to-this-class column="personOID"/> <fk-pointing-to-element-class column="competencyOID"/> </collection-descriptor> </class-descriptor>
------------------------------------------------------------------------
package com.staffmix.nurse.play;
import org.apache.ojb.broker.PersistenceBroker; import org.apache.ojb.broker.PersistenceBrokerException; import com.staffmix.nurse.competencies.PersonImpl; import com.staffmix.nurse.competencies.Trait; import com.staffmix.nurse.competencies.TraitImpl;
/** * Insert the type's description here. * Creation date: (04.03.2001 10:34:15) * @author Thomas Mahler */ public class UCEnterNewPerson extends AbstractUseCase { /** * UCEnterNewProduct constructor comment. */ public UCEnterNewPerson(PersistenceBroker broker) { super(broker); }
/** perform this use case*/ public void apply() { // this will be our new object PersonImpl newPerson = new PersonImpl(); // now read in all relevant information and fill the new object: System.out.println("please enter a new person"); String in = readLineWithMessage("enter name:"); newPerson.setName(in); in = readLineWithMessage("enter empid:"); newPerson.setEmpid(in);
// now perform persistence operations try { // 1. open transaction broker.beginTransaction();
while( (in = readLineWithMessage("Enter trait:")) != null ) { String traitName = in.trim(); if( traitName.length() == 0 ) break; TraitImpl trait = new TraitImpl(); trait.setTraitName( traitName ); newPerson.addTrait( trait ); }
// 2. make the new object persistent broker.store(newPerson); broker.commitTransaction(); } catch (PersistenceBrokerException ex) { // if something went wrong: rollback broker.abortTransaction(); System.out.println(ex.getMessage()); ex.printStackTrace(); } }
/** get descriptive information on use case*/ public String getDescription() { return "Enter a new person"; } }
------------------------------------------------------------------------
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
