Without seeing the database tables this only a guess but: many-key is used
when you are mapping to a collection. It looks like you intent is to a 1:1
relationship so:

         <field name="user" type
="com.sourcepark.requirementManagement.dbObjects.User">
          <sql many-key="user_id"/>
         </field>
should be
         <field name="user" type
="com.sourcepark.requirementManagement.dbObjects.User">
          <sql name="user_id"/>
         </field>
I have also found that it is much better from a documentation standpoint
and troubleshooting stand point to clearly state in the mapping file even
those things that castor will do automatically for me.  I assume you
collection definition is really:

    <field name="events" type
="com.sourcepark.requirementManagement.dbObjects.RequirementEvent"
                     collection="vector" required="true"
                 set-method="setEventsAsReference" get-method
="getEventsAsReference">
     <sql name="id" many-table="requirement_events" many-key="req_id">
????



                                                                                       
                                                 
                    Steffen Fiedler                                                    
                                                 
                    <steffen.fiedler@sour       To:     [EMAIL PROTECTED]          
                                                 
                    cepark.de>                  cc:                                    
                                                 
                                                Subject:     [castor-dev] saving 
depended Object that links to another object           
                    01/16/2003 02:27 AM                                                
                                                 
                    Please respond to                                                  
                                                 
                    castor-dev                                                         
                                                 
                                                                                       
                                                 
                                                                                       
                                                 




Hi,

I have problems to save objects with depended objects that
links to another object.

mapping.xml:

<class name="com.sourcepark.requirementManagement.dbObjects.Requirement"
                               identity="id" key-generator="MAX">
     <map-to table="requirements"/>

     <field name="id" type="integer" >
       <sql name="id" type="integer"/>
     </field>


     <field name="name"       type="string">
       <sql name="name"       type="char"/>
     </field>

     <field name="events" type
="com.sourcepark.requirementManagement.dbObjects.RequirementEvent"
                     collection="vector" required="true"
                 set-method="setEventsAsReference" get-method
="getEventsAsReference"/>
</class>



<class name
="com.sourcepark.requirementManagement.dbObjects.RequirementEvent"
                     depends
="com.sourcepark.requirementManagement.dbObjects.Requirement"
                                       identity="id" key-generator="MAX">
         <map-to table="requirement_events"/>

         <field name="id" type="integer" >
           <sql name="id" type="integer"/>
         </field>

         <field name="requirement"  type
="com.sourcepark.requirementManagement.dbObjects.Requirement" >
           <sql name="req_id"/>
         </field>

         <field name="name" type="string">
           <sql name="name" type="char" required="true"/>
         </field>

         <field name="user" type
="com.sourcepark.requirementManagement.dbObjects.User">
          <sql many-key="user_id"/>
         </field>
    </class>


<class name="com.sourcepark.requirementManagement.dbObjects.User"
                                        identity="id" key-generator="MAX">
     <map-to table="users"/>

     <field name="id" type="integer" >
       <sql name="id" type="integer"/>
     </field>

     <field name="name"  type="string">
       <sql name="name"  type="char"/>
     </field>
</class>


this is the code to save the requirement-Object:

...
     RequirementEvent reqEvent=new RequirementEvent();
     reqEvent.setName("event-Name");
     //gets an (in DB existing) user with id=1
     User user=userManager.getUser(1);
     reqEvent.setUser(user);
     Requirement newRequirement=new Requirement();
     reqEvent.setRequirement(newRequirement);
     newRequirement.setName("REQUIREMENT-Name");
     newRequirement.addEvents(reqEvent);
...
     db.begin();
     //make User of new Event persistent
     RequirementEvent lastEvent
=(RequirementEvent)(requirement.getEventsAsReference().lastElement());
     newEvent.setUser((User)persistence.load(User.class,newEvent.getUser
().getId()));
     System.out.println("UserId of last Event: "+newEvent.getUser().getId
());
     System.out.println("User-persistent? : "
+persistence.isPersistent(newEvent.getUser()));
     db.create(requirement);
     System.out.println("User-persistent? : "
+persistence.isPersistent(newEvent.getUser()));
     db.commit();
...

and here is the output:

...
UserId of last Event: 1
User-persistent? :  true
Error while saving object: org.exolab.castor.jdo.PersistenceException:
Nested error: java.sql.SQLException: ORA-01400: Einf³gen von NULL in
("CASTOR"."REQUIREMENT_EVENTS"."USER_ID") nicht m÷glich
User-Persistent? : true
...

Castor tries to insert null in the foreign-key for user.
Whats wrong? Is it not possible to link from depended objects
to other objects?

Thanks,
Steffen

-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
           unsubscribe castor-dev

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to