Marco,
in your code fragment below, please make sure that you load the
OrganisationData instance within the transaction where you want to set your
Benutzer
data. Iow,
OrganisationData orga =
(OrganisationData)jdo.load(OrganisationData.class,new
Integer(form.getIdOrganisation()));
db.begin();
benutzer.setOrganisationData(orga);
orga.addBenutzer(benutzer);
db.create(benutzer);
db.commit();
should read
db.begin();
OrganisationData orga =
(OrganisationData)jdo.load(OrganisationData.class,new
Integer(form.getIdOrganisation()));
benutzer.setOrganisationData(orga);
orga.addBenutzer(benutzer);
db.create(benutzer);
db.commit();
Regards
Werner
On Tue, 21 Dec 2004 17:16:55 +0100 (CET), [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