It sounds perfect. Really. But what's Andrea going to
see is that he has a new row inserted in DETAILS table
with REQUEST column set to NULL(that's in case he has
set the required to "false", in case he hasn't he'll
get a SQLException). I tried it with MySQL and that's
what happened. So... there's something wrong with
these Peer classes.
Hristo Kosev
--- Scott Eade <[EMAIL PROTECTED]> wrote:
> If you set your schema up correctly you don't need
> the id.
>
> Here is what you should have:
>
> <table name="DETAILS">
> ...
> <foreign-key foreignTable="REQUEST">
> <reference local="REQUEST" foreign="ID"/>
> </foreign-key>
> </table>
>
> When torque generates the OM layer it will generate
> a method:
>
> Request.addDetails(Details)
>
> [BTW: It is better to name your tables in the
> singular - i.e. DETAIL
> rather than DETAILS. I also find it better to have
> more meaningful
> column names - i.e. DETAIL_ID, REQUEST_ID, etc. and
> to use
> the full key name where appropriate - i.e. DETAILS
> would use
> REQUEST_ID rather than REQUEST. But these may just
> be my
> preferences.]
>
> So this means that you don't need the id. You go
> like this:
>
> Request r = new Request();
> r.setSrc(3);
> ...
> Details d = new Details();
> d.setCode(5);
> ...
>
> ... and here is the magic line:
>
> r.addDetails(d);
>
> Now when it comes to saving the records all you need
> to do is:
>
> r.save();
>
> ... and this will save all of the Details records
> you have added to the
> Request as well as the Request itself. I am pretty
> sure it also wraps
> them in the appropriate transaction logic (which is
> I guess ignored for
> MySQL - can anyone tell me it works when using one
> of the table
> drivers that does support transactions - i.e.
> BerkeleyDB, InnoDB
> Gemini, etc.)
>
> Whilst the code generated by torque doesn't do
> everything, it does
> do a hell of a lot. Set your schema up correctly
> and then take the
> time to examine the methods generated in the Base~
> and Base~Peer
> classes - there are plenty of goodies to make your
> life easier.
>
> ----- Original Message -----
> From: "Andrea Papotti" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, August 31, 2001 9:00 PM
> Subject: autoincrement and key retriving
>
>
> > I have two tables like:
> >
> > <table name="REQUEST">
> > <!-- substitution requests (header) -->
> > <column name="ID" type="INTEGER"
> required="true"
> > autoIncrement="true" primaryKey="true"/>
> > <column name="SRC" type="INTEGER"
> required="true"/>
> > <column name="DST" type="INTEGER"
> required="true"/>
> > <column name="DATE" size="8"
> type="VARCHAR" required="true"/>
> > <column name="NOTE" size="80"
> type="VARCHAR" required="true"/>
> > </table>
> >
> > <table name="DETAILS">
> > <!-- substitution requests (detail) -->
> > <column name="ID"
> type="INTEGER" required="true"
> > autoIncrement="true" primaryKey="true"/>
> > <column name="REQUEST" type="INTEGER"
> required="true"/>
> > <column name="CODE" type="INTEGER"
> required="true"/>
> > <column name="QTY" type="INTEGER"
> required="true"/>
> > </table>
> >
> > which are related via REQUEST.ID = DETAILS.REQUEST
> >
> >
> > I need to write 1 record in "REQUEST" fallowed by
> many records in "DETAILS",
> >
> > try
> > {
> > Richieste header = new Request();
> > header.setSrc( src_code );
> > header.setDst( dst_code);
> > header.setDatel( today() );
> > header.setNote( note );
> > header.save();
> >
> > header_id =
> header.getId().getBigDecimal().intValue();
> > }
> > catch (Exception e)
> > {
> > context.put("error", "header: " +
> e.toString());
> > return;
> > }
> >
> >
> > fallowed by code to write records in "DETAILS".
> >
> > BUT
> >
> > header_id =
> header.getId().getBigDecimal().intValue();
> >
> > fails bacause header.getId() returns null.
> >
> > the question is:
> >
> > I must re-read the record just saved (with the
> immediatly previous
> > statment), or there is a method to obtain the
> value of the primary-key just
> > afer the .save() call?
> >
> > Re-read the record could be a problem, because the
> only unique field is
> > right the ID.
> >
> > tia, Andrea =8-)
__________________________________________________
Do You Yahoo!?
Get email alerts & NEW webcam video instant messaging with Yahoo! Messenger
http://im.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]