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