Hello Ralf,

I am sorry, I described the problem incorrectly.
The problem occurs only with 1:N relations.
I have attached the relevant DDL and mapping parts and
the the source files. I am working with Castor 0.9.9
and SapDB 7.4.
In my example, I have the following relation:

Systemstates 1 ------ n State

I supposed that the key-generator generates values for
the field "id" in both tables AND the field
"systemstates" in table "state", when I call
db.create(systemStates), where systemStates is an
instance of Systemstates.
But the field "systemstates" is not initialized.

Stefan

 --- Ralf Joachim <[EMAIL PROTECTED]>
schrieb: 
> Hi Stefan,
> 
> this should normally work. Can you provide us with
> some more information 
> e.g. castor version, database, mapping.
> 
> Ralf
> 
> Stefan Lober schrieb:
> 
> >Hello,
> >
> >while working with Castor JDO, I came across the
> >following problem:
> >My database mapping file contains one top-level
> >element which references the other elements. All
> >referenced elements are declared with "depends" set
> to
> >the top-level element. Thus, they are dependent on
> >this element. All elements have "key-generator" set
> to
> >"MAX".
> >When I try to insert a set of data by calling
> >db.create(...) with the top-level element as
> parameter
> >and no keys initialized for any element in the
> >hierarchy, I get an exception from my database
> which
> >tells me "Missing non-NULL value". This occurs
> because
> >the id (foreign key) for the referenced elements
> have
> >not been initialized.
> >Is the Key-Generator not supposed to initialize
> >private keys (set by "identity") AND the respective
> >foreign keys?
> >
> >Stefan
> >
> >
> >     
> >
> >     
> >             
>
>___________________________________________________________
> 
> >Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher
> kostenlos - Hier anmelden: http://mail.yahoo.de
> >
> >-------------------------------------------------
> >If you wish to unsubscribe from this list, please 
> >send an empty message to the following address:
> >
> >[EMAIL PROTECTED]
> >-------------------------------------------------
> >  
> >
> 
> -------------------------------------------------
> If you wish to unsubscribe from this list, please 
> send an empty message to the following address:
> 
> [EMAIL PROTECTED]
> -------------------------------------------------
> 
>  



        

        
                
___________________________________________________________ 
Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos - Hier anmelden: 
http://mail.yahoo.de
drop table Systemstates
//

create table Systemstates (
  id integer not null,
  primary key(id)
)
//

drop table State
//

create table State (
  id integer not null,
  stateMoment varchar(200),
  stamptime varchar(200),
  systemstates integer not null,
  content varchar(200),
  primary key(id)
)
<class cst:name="log.Systemstates" cst:depends="log.Log1" cst:identity="id" cst:key-generator="MAX">
  <description>Default mapping for class log.Systemstates</description>
  <map-to cst:table="Systemstates" cst:xml="systemstates"/>
  <field cst:name="id" cst:type="integer">
    <sql name="id" type="integer" dirty="check"/>
    <bind-xml name="id" node="attribute"/>
  </field>
    <field cst:name="state" cst:type="log.State" cst:required="true" cst:collection="array">
    <sql many-key="state" dirty="check"/>
    <bind-xml name="state" node="element"/>
    </field>
  </class>
<class cst:name="log.State" cst:depends="log.Systemstates" cst:identity="id" cst:key-generator="MAX">
  <description>Default mapping for class log.State</description>
  <map-to cst:table="State" cst:xml="state"/>
  <field cst:name="id" cst:type="integer">
    <sql name="id" type="integer" dirty="check"/>
    <bind-xml name="id" node="attribute"/>
  </field>
  <field cst:name="stateMoment" cst:type="string" cst:required="true">
    <sql name="stateMoment" type="char" dirty="check"/>
    <bind-xml name="state-moment" node="attribute"/>
  </field>
  <field cst:name="stamptime" cst:type="string" cst:required="true">
    <sql name="stamptime" type="char" dirty="check"/>
    <bind-xml name="stamptime" node="attribute"/>
  </field>
  <field cst:name="systemstates" cst:type="log.Systemstates">
    <sql name="systemstates" dirty="check"/>
    <bind-xml name="systemstates" node="element"/>
  </field>
  <field cst:name="content" cst:type="string">
    <sql name="content" type="char" dirty="check"/>
    <bind-xml name="PCDATA" node="text"/>
  </field>
</class>
/* * This class was automatically generated with * Castor 0.9.9, using an XML * Schema. * $Id$ */ package log; //---------------------------------/ //- Imported classes and packages -/ //---------------------------------/ import java.io.IOException; import java.io.Reader; import java.io.Serializable; import java.io.Writer; import java.util.Enumeration; import java.util.Vector; import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.Marshaller; import org.exolab.castor.xml.Unmarshaller; import org.exolab.castor.xml.ValidationException; import org.xml.sax.ContentHandler; /** * Class Systemstates. * * @version $Revision$ $Date$ */ public class Systemstates implements java.io.Serializable { //--------------------------/ //- Class/Member Variables -/ //--------------------------/ /** * Field _id */ private int _id; /** * keeps track of state for field: _id */ private boolean _has_id; /** * Field _stateList */ private java.util.Vector _stateList; //----------------/ //- Constructors -/ //----------------/ public Systemstates() { super(); _stateList = new Vector(); } //-- log.Systemstates() //-----------/ //- Methods -/ //-----------/ /** * Method addState * * * * @param vState */ public void addState(log.State vState) throws java.lang.IndexOutOfBoundsException { _stateList.addElement(vState); } //-- void addState(log.State) /** * Method addState * * * * @param index * @param vState */ public void addState(int index, log.State vState) throws java.lang.IndexOutOfBoundsException { _stateList.insertElementAt(vState, index); } //-- void addState(int, log.State) /** * Method deleteId * */ public void deleteId() { this._has_id= false; } //-- void deleteId() /** * Method enumerateState * * * * @return Enumeration */ public java.util.Enumeration enumerateState() { return _stateList.elements(); } //-- java.util.Enumeration enumerateState() /** * Returns the value of field 'id'. * * @return int * @return the value of field 'id'. */ public int getId() { return this._id; } //-- int getId() /** * Method getState * * * * @param index * @return State */ public log.State getState(int index) throws java.lang.IndexOutOfBoundsException { //-- check bounds for index if ((index < 0) || (index > _stateList.size())) { throw new IndexOutOfBoundsException("getState: Index value '"+index+"' not in range [0.."+_stateList.size()+ "]"); } return (log.State) _stateList.elementAt(index); } //-- log.State getState(int) /** * Method getState * * * * @return State */ public log.State[] getState() { int size = _stateList.size(); log.State[] mArray = new log.State[size]; for (int index = 0; index < size; index++) { mArray[index] = (log.State) _stateList.elementAt(index); } return mArray; } //-- log.State[] getState() /** * Method getStateCount * * * * @return int */ public int getStateCount() { return _stateList.size(); } //-- int getStateCount() /** * Method hasId * * * * @return boolean */ public boolean hasId() { return this._has_id; } //-- boolean hasId() /** * Method isValid * * * * @return boolean */ public boolean isValid() { try { validate(); } catch (org.exolab.castor.xml.ValidationException vex) { return false; } return true; } //-- boolean isValid() /** * Method marshal * * * * @param out */ public void marshal(java.io.Writer out) throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { Marshaller.marshal(this, out); } //-- void marshal(java.io.Writer) /** * Method marshal * * * * @param handler */ public void marshal(org.xml.sax.ContentHandler handler) throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { Marshaller.marshal(this, handler); } //-- void marshal(org.xml.sax.ContentHandler) /** * Method removeAllState * */ public void removeAllState() { _stateList.removeAllElements(); } //-- void removeAllState() /** * Method removeState * * * * @param index * @return State */ public log.State removeState(int index) { java.lang.Object obj = _stateList.elementAt(index); _stateList.removeElementAt(index); return (log.State) obj; } //-- log.State removeState(int) /** * Sets the value of field 'id'. * * @param id the value of field 'id'. */ public void setId(int id) { this._id = id; this._has_id = true; } //-- void setId(int) /** * Method setState * * * * @param index * @param vState */ public void setState(int index, log.State vState) throws java.lang.IndexOutOfBoundsException { //-- check bounds for index if ((index < 0) || (index > _stateList.size())) { throw new IndexOutOfBoundsException("setState: Index value '"+index+"' not in range [0.."+_stateList.size()+ "]"); } _stateList.setElementAt(vState, index); } //-- void setState(int, log.State) /** * Method setState * * * * @param stateArray */ public void setState(log.State[] stateArray) { //-- copy array _stateList.removeAllElements(); for (int i = 0; i < stateArray.length; i++) { _stateList.addElement(stateArray[i]); } } //-- void setState(log.State) /** * Method unmarshal * * * * @param reader * @return Systemstates */ public static log.Systemstates unmarshal(java.io.Reader reader) throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { return (log.Systemstates) Unmarshaller.unmarshal(log.Systemstates.class, reader); } //-- log.Systemstates unmarshal(java.io.Reader) /** * Method validate * */ public void validate() throws org.exolab.castor.xml.ValidationException { org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator(); validator.validate(this); } //-- void validate() } /* * This class was automatically generated with * Castor 0.9.9, using an XML * Schema. * $Id$ */ package log; //---------------------------------/ //- Imported classes and packages -/ //---------------------------------/ import java.io.IOException; import java.io.Reader; import java.io.Serializable; import java.io.Writer; import org.exolab.castor.xml.MarshalException; import org.exolab.castor.xml.Marshaller; import org.exolab.castor.xml.Unmarshaller; import org.exolab.castor.xml.ValidationException; import org.xml.sax.ContentHandler; /** * Class State. * * @version $Revision$ $Date$ */ public class State implements java.io.Serializable { //--------------------------/ //- Class/Member Variables -/ //--------------------------/ /** * Field _id */ private int _id; /** * keeps track of state for field: _id */ private boolean _has_id; /** * Field _stateMoment */ private java.lang.String _stateMoment; /** * Field _stamptime */ private java.lang.String _stamptime; /** * internal content storage */ private java.lang.String _content = ""; /** * Field _systemstates */ private log.Systemstates _systemstates; //----------------/ //- Constructors -/ //----------------/ public State() { super(); setContent(""); } //-- log.State() //-----------/ //- Methods -/ //-----------/ /** * Method deleteId * */ public void deleteId() { this._has_id= false; } //-- void deleteId() /** * Returns the value of field 'content'. The field 'content' * has the following description: internal content storage * * @return String * @return the value of field 'content'. */ public java.lang.String getContent() { return this._content; } //-- java.lang.String getContent() /** * Returns the value of field 'id'. * * @return int * @return the value of field 'id'. */ public int getId() { return this._id; } //-- int getId() /** * Returns the value of field 'stamptime'. * * @return String * @return the value of field 'stamptime'. */ public java.lang.String getStamptime() { return this._stamptime; } //-- java.lang.String getStamptime() /** * Returns the value of field 'stateMoment'. * * @return String * @return the value of field 'stateMoment'. */ public java.lang.String getStateMoment() { return this._stateMoment; } //-- java.lang.String getStateMoment() /** * Returns the value of field 'systemstates'. * * @return Systemstates * @return the value of field 'systemstates'. */ public log.Systemstates getSystemstates() { return this._systemstates; } //-- log.Systemstates getSystemstates() /** * Method hasId * * * * @return boolean */ public boolean hasId() { return this._has_id; } //-- boolean hasId() /** * Method isValid * * * * @return boolean */ public boolean isValid() { try { validate(); } catch (org.exolab.castor.xml.ValidationException vex) { return false; } return true; } //-- boolean isValid() /** * Method marshal * * * * @param out */ public void marshal(java.io.Writer out) throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { Marshaller.marshal(this, out); } //-- void marshal(java.io.Writer) /** * Method marshal * * * * @param handler */ public void marshal(org.xml.sax.ContentHandler handler) throws java.io.IOException, org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { Marshaller.marshal(this, handler); } //-- void marshal(org.xml.sax.ContentHandler) /** * Sets the value of field 'content'. The field 'content' has * the following description: internal content storage * * @param content the value of field 'content'. */ public void setContent(java.lang.String content) { this._content = content; } //-- void setContent(java.lang.String) /** * Sets the value of field 'id'. * * @param id the value of field 'id'. */ public void setId(int id) { this._id = id; this._has_id = true; } //-- void setId(int) /** * Sets the value of field 'stamptime'. * * @param stamptime the value of field 'stamptime'. */ public void setStamptime(java.lang.String stamptime) { this._stamptime = stamptime; } //-- void setStamptime(java.lang.String) /** * Sets the value of field 'stateMoment'. * * @param stateMoment the value of field 'stateMoment'. */ public void setStateMoment(java.lang.String stateMoment) { this._stateMoment = stateMoment; } //-- void setStateMoment(java.lang.String) /** * Sets the value of field 'systemstates'. * * @param systemstates the value of field 'systemstates'. */ public void setSystemstates(log.Systemstates systemstates) { this._systemstates = systemstates; } //-- void setSystemstates(log.Systemstates) /** * Method unmarshal * * * * @param reader * @return State */ public static log.State unmarshal(java.io.Reader reader) throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException { return (log.State) Unmarshaller.unmarshal(log.State.class, reader); } //-- log.State unmarshal(java.io.Reader) /** * Method validate * */ public void validate() throws org.exolab.castor.xml.ValidationException { org.exolab.castor.xml.Validator validator = new org.exolab.castor.xml.Validator(); validator.validate(this); } //-- void validate() }
-------------------------------------------------
If you wish to unsubscribe from this list, please 
send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to