I've had this problem as well, and its something to do with how castor
inserts the data. For some reason, when castor goes to insert the data
for the first time it wont put the foreign keys in there (only tried
this with auto-generated keys like IDENTITY and such). But when all is
said in done the key will be there. So I just let the fields accept
NULL and move on knowing that castor will put em there.
This may be something to look into though.
-Nick
On Tue, 21 Dec 2004 17:16:55 +0100 (CET), [EMAIL PROTECTED] <[EMAIL PROTECTED]>
wrote:
> Hi,
>
> i have problems with the foreign key, i can't set the idorganisation in
> table benutzer. The log says Column 'idorganisation' cannot be null.
>
> --
> -- Tabellenstruktur f�r Tabelle `benutzer`
> --
>
> CREATE TABLE benutzer (
> id int(11) NOT NULL default '0',
> kennung varchar(8) NOT NULL default '',
> passwort varchar(42) NOT NULL default '',
> name varchar(100) NOT NULL default '',
> vorname varchar(50) NOT NULL default '',
> telefon varchar(25) default NULL,
> email varchar(100) default NULL,
> zustand char(1) NOT NULL default '',
> idorganisation int(11) NOT NULL default '0',
> PRIMARY KEY (id),
> UNIQUE KEY kennung (kennung),
> KEY idorganisation (idorganisation)
> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
>
> -- --------------------------------------------------------
>
> --
> -- Tabellenstruktur f�r Tabelle `organisation`
> --
>
> CREATE TABLE organisation (
> id int(11) NOT NULL default '0',
> name varchar(100) NOT NULL default '',
> art char(1) NOT NULL default '',
> PRIMARY KEY (id),
> UNIQUE KEY name (name)
> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
>
> --
> -- Constraints der exportierten Tabellen
> --
>
> --
> -- Constraints der Tabelle `benutzer`
> --
> ALTER TABLE `benutzer`
> ADD CONSTRAINT benutzer_ibfk_1 FOREIGN KEY (idorganisation) REFERENCES
> organisation (id);
>
> ----------------------------------------------------------------------------------------
>
> mapping.xml:
>
> <class name="BenutzerData" identity="id" key-generator="MAX" >
> <map-to table="benutzer" />
> <field name="id" type="integer">
> <sql name="id" type="integer" />
> </field>
> <field name="kennung" type="string">
> <sql name="kennung" type="varchar" />
> </field>
> <field name="passwort" type="string">
> <sql name="passwort" type="varchar" />
> </field>
> <field name="name" type="string">
> <sql name="name" type="varchar" />
> </field>
> <field name="vorname" type="string">
> <sql name="vorname" type="varchar" />
> </field>
> <field name="telefon" type="string">
> <sql name="telefon" type="varchar" />
> </field>
> <field name="email" type="string">
> <sql name="email" type="varchar" />
> </field>
> <field name="zustand" type="string">
> <sql name="zustand" type="char" />
> </field>
> <field name="organisationData"
> type="OrganisationData" required="true">
> <sql name="idorganisation" />
> </field>
>
> </class>
>
> <!-- Mapping for OrganisationData -->
> <class name="OrganisationData"
> identity="id" key-generator="MAX">
> <map-to table="organisation" />
> <field name="id" type="integer" >
> <sql name="id" type="integer"/>
> </field>
> <field name="name" type="string">
> <sql name="name" type="varchar"/>
> </field>
> <field name="art" type="string">
> <sql name="art" type="char"/>
> </field>
> <field name="benutzer"
> type="BenutzerData"
> collection="arraylist" >
> <sql many-key="idorganisation" >
> </field>
> </class>
>
> ---------------------------------------------------------
>
> BenutzerData.java:
>
> ..
> private OrganisationData organisationData;
>
> /**
> * @return Returns the organisationData.
> */
> public OrganisationData getOrganisationData() {
> return organisationData;
> }
> /**
> * @param organisationData The organisationData to set.
> */
> public void setOrganisationData(OrganisationData organisationData) {
> this.organisationData = organisationData;
> }
> ..
>
> OrganisationData.java:
>
> ..
> private int id;
> private String name = "";
> private String art = "";
> private ArrayList benutzer = new ArrayList();
>
> /**
> * @return Returns the benutzer.
> */
> public ArrayList getBenutzer() {
> return benutzer;
> }
> /**
> * @param benutzer The benutzer to set.
> */
> public void setBenutzer(ArrayList benutzer) {
> this.benutzer = benutzer;
> }
> /**
> * @param add benutzer to the collection benutzer
> */
> public void addBenutzer(BenutzerData benutzer){
> this.benutzer.add(benutzer);
> benutzer.setOrganisationData(this);
> }
> ..
>
> UserFactory.java:
>
> ..
> OrganisationData orga =
> (OrganisationData)jdo.load(OrganisationData.class,new
> Integer(form.getIdOrganisation()));
>
> db.begin();
>
> System.out.println(">>>> orga.getId(): " +
> orga.getId()); // orga is not null -> id is set!!!
>
> benutzer.setOrganisationData(orga);
> orga.addBenutzer(benutzer);
> db.create(benutzer);
>
> db.commit();
> db.close();
> ..
>
> ---------------------------------------------------------
> logger output:
>
> ..
> >>>> orga.getId(): 1
> 21.12.2004 16:47:30 org.exolab.castor.jdo.engine.SQLEngine create
> SCHWERWIEGEND: A fatal error occurred while creating/updating BenutzerData
> using SQL: INSERT INTO benutzer
> (id,kennung,passwort,name,vorname,telefon,email,zustand,idorganisation)
> VALUES (?,?,?,?,?,?,?,?,?)
> java.sql.SQLException: Column 'idorganisation' cannot be null
> at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2816)
> at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1518)
> ..
>
> ----------------------------------------------------------
>
> I use:
> castor-0.9.6-RC2
> mySQL 4.1
>
> Please help me.
>
> Thanks
> Marco
>
> Arcor-DSL: die echte Flatrate f�r alle Bandbreiten. Jetzt ohne
> Einrichtungspreis
> einsteigen oder wechseln. Arcor-DSL ist in vielen Anschlussgebieten verf�gbar.
> http://www.arcor.de/home/redir.php/emf-dsl-1
>
>
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
> unsubscribe castor-user
>
>
>
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-user