thank you but
1) does not work, the behaviour is just the same, the bId is still set to 0
in table A
2) i don't want to rely on "client" code to persist my business model :
    when the model will get more complex, "simple" solutions like that won't
be feasible/working

by the way :
i think it strange that the _same_ code works in castor 0.8.11
(i know a lot of rewriting has been done, but i can't imagine nobody needing
this kind of behaviour)

by the way 2 : it seems to me, since solution 2) "works" that it's just some
kind of a bug
just as if jdoBeforeCreate() was actually called _after_ the create...
which would explain why only the bId is not correctly set in database

anyway thanks again for your help
David
----- Original Message -----
From: "Ebersole, Steven" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, March 05, 2002 7:01 PM
Subject: Re: [castor-dev] simple relation


> Two ways to correct:
> 1) Define b as "dependent" on a; this is done in the mapping file and is
> pretty well documeneted (see FAQs);
> 2) Change the client code to the following:
>     b = new B();
>     b.setTitle("some title");
>
>     db.create(b);   // <- Add this line.................................
>
>     a = new A();
>     a.setB(b);
>     db.create(a);
>
>
>
>
>
> ********************************************
> Steve Ebersole
> IT Integration Engineer
> Vignette Corporation
> 512.741.4195
>
> Visit http://www.vignette.com
>
> ********************************************
>
>
> -----Original Message-----
> From: David Rault [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, March 05, 2002 11:32 AM
> To: [EMAIL PROTECTED]
> Subject: [castor-dev] simple relation
>
>
> hi everybody
>
> i used to 'play' with castor 0.8.11
> and i'm currently trying to update my skills with newer versions (0.9.3.9,
> 0.9.3.13 and latest cvs)
>
> my problem is a very simple relation that works with 0.8.11 does not work
> with the previously named versions
> actually it partly works, and that's my problem, i don't see why it
behaves
> that way :
>
> i (quickly) searched the mailing-list archive but saw nothing matching...
>
> i'v got a my generic super class for persistent objects : Super
> i've got 2 subclasses : A and B
> A has a field of type B
>
> here is the code :
>
> ******************************
> public class Super implements Persistent {
>  private transient Database _database;
>  private int id;
>  public int getId() {
>   return id;
>  }
>  public void setId(int id) {
>   this.id = id;
>  }
>  public Super() {
>   super();
>  }
>  public void jdoPersistent(Database db) {
>   setDatabase(db);
>  }
>  /*
>  the other methods of Persistent are defined empty
>  not shown here for lisibility
>  */
>  protected Database getDatabase() {
>   return _database;
>  }
>  protected void setDatabase(Database database) {
>   _database = database;
>  }
>  /** for backward compatibility with castor 0.8.11 */
>  public void jdoCreate() throws Exception {
>   jdoBeforeCreate(getDatabase());
>  }
> }
> ******************************
> public class A extends Super {
>  private B b;
>  public A() {
>   super();
>  }
>  public B getB() {
>   return b;
>  }
>  public void setB(B b) {
>   this.b = b;
>  }
>  public void jdoBeforeCreate(Database db) throws Exception {
>   if (getB() != null) {
>    if (getB().getId()==0) {
>     db.create(getB());
>    } else {
>     db.update(getB());
>    }
>   }
>  }
> }
> ******************************
> public class B extends Super {
>  private String title;
>  public B() {
>   super();
>  }
>  public String getTitle() {
>   return title;
>  }
>  public void setTitle(String title) {
>   this.title = title;
>  }
> }
> ******************************
>
> my mapping looks like this :
> ******************************
> <?xml version="1.0"?>
> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN"
> "http://castor.exolab.org/mapping.dtd"; >
> <mapping>
>     <key-generator alias="mykeygen" name="MAX"></key-generator>
>     <class access="shared" identity="id"
> name="com.sysdeo.persistence.castor.test.Super" key-generator="mykeygen">
>         <map-to table="super" xml="super"/>
>         <field direct="false" lazy="false" name="id" required="true"
> type="integer">
>             <sql dirty="check" name="id" type="integer"/>
>         </field>
>     </class>
>     <class access="shared" identity="id"
> name="com.sysdeo.persistence.castor.test.A" key-generator="mykeygen"
> extends="com.sysdeo.persistence.castor.test.Super">
>         <map-to table="a" xml="a"/>
>         <field direct="false" lazy="false" name="id" required="true"
> type="integer">
>             <sql dirty="check" name="id" type="integer"/>
>         </field>
>         <field name="b" direct="false" lazy="false" required="false"
> type="com.sysdeo.persistence.castor.test.B">
>             <sql dirty="ignore" name="bId" />
>         </field>
>     </class>
>     <class access="shared" identity="id"
> name="com.sysdeo.persistence.castor.test.B" key-generator="mykeygen"
> extends="com.sysdeo.persistence.castor.test.Super">
>         <map-to table="b" xml="b"/>
>         <field direct="false" lazy="false" name="id" required="true"
> type="integer">
>             <description>l'identifiant de tout objet</description>
>             <sql dirty="check" name="id" type="integer"/>
>         </field>
>         <field name="title" direct="false" lazy="false" required="false"
> type="string">
>             <description>le titre de l'objet</description>
>             <sql dirty="check" name="title" type="varchar"/>
>         </field>
>     </class>
> </mapping>
> ******************************
>
> the id field is set by the key generator (here is a simple MAX algorithm
but
> i've got the same problem with
> MySQL IDENTITY)
>
> ******************************
> and finally here is what i try :
>
> b = new B();
> b.setTitle("some title");
> a = new A();
> a.setB(b);
> db.create(a);
> ******************************
>
> both 'a' and 'b' are persisted BUT the bId in 'a' is set to 0 in the
> database
> whereas the id of 'b' is set correctly in the B table
>
> what have i missed ?
>
> one constraint is that i don't want a reference to 'a' in 'b'
> (only 'a' knows about 'b')
> i've also tried to remove the common superclass (in case that would be
some
> locking for the id generation) : not better
>
> thanks a lot for your help, i hope i gave enough details of my case
>
> David
>
> -----------------------------------------------------------
> 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
>
>
>

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

Reply via email to