|
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. --
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]
