Your argument implies that it matters which row gets pk 1 and which gets pk
2 when two ejb entity objects are created at the same time, but to me it
doesn't.  All I care about is that each of the objects gets a distinct pk
and a known pk.  When the getNewFoodId() method returns I will *always* get
a unique known pk.  So what is the problem?  I don't care which one gets 1
and which one gets 2 as long as I know which gets which (and i do know
because of the return value).

I am interested to continue this discussion because the db gen'd pk thread
comes up often with no "right way" to do it closure that I have seen.

>From: Stefan Hanenberg <[EMAIL PROTECTED]>
>To: A mailing list for Enterprise JavaBeans development
><[EMAIL PROTECTED]>,        [EMAIL PROTECTED]
>Subject: Re: DB Generated Primary Key
>Date: Wed, 05 Jul 2000 16:06:18 +0200
>
>Hi Thomas,
>
>I think there is NO possibility in EJB to use a DB generated primary
>key! The code you are using has one fault:
>
>If two enterprise objects will be created the same time, you cannot be
>sure, that you got the "right newFoodID" for every object.
>
>For example: you create object A and Object B the same time. When
>ejbCreate for A is invoked getNewFoodId() returns id 1, When ejbCreate
>for B is invoked getNewFoodId() returns id 2. But you cannot be shure
>that A will be really created before B!!!
>
>One solution could be, that getNewFoodId() created a new row in your
>table, and the method ejbCreate does not use an INSERT but an UPDATE for
>accessing the db. But in this case you have to be sure, that every
>ejbContainer, where you bean is installed, allows you to create the
>SQL-statements on you own. That is not required by the EJB-spec.
>
>Within the ejb-spec (9.4.2) you can find:
>"The container may create the representation of the entity in the
>database immediately after ejbCreate(...) returns, or
>it can defer it to a later time (for example to the time after the
>matching ejbPostCreate(...) has been called, or to the end of the
>transaction)."
>
>That means: If your Bean should be deployed in every ejbContainer, you
>never know when is accesses the database.
>
>Stefan
>
>Thomas Preston schrieb:
> >
> > In ejbCreate, call a method which gets the next primary key from the db.
> > Here is an example of ejbCreate and methhod that gets next seq from db
>(this
> > can be a CMP bean):
> >
> >         public void ejbCreate( String Product_code) throws
>RemoteException,
> > CreateException
> >         {
> >                 try {
> >                         //create primary key
> >                         m_Food_id = getNewFoodId();
> >
> >                         //init rest of fields
> >                         //fields passed in to constructor
> >                         m_Product_code = Product_code;
> >
> >                         //fields not passed in to constuctor
> >                         m_Ingredient = null;
> >
> >                 }
> >                 catch(Exception exp) {
> >                         throw new CreateException( exp.getMessage() );
> >                 }
> >         }
> >
> >         private Integer getNewFoodId() throws Exception
> >         {
> >                 Connection connect   = null;
> >                 Statement  statement = null;
> >                 ResultSet  results   = null;
> >                 Integer FoodId = null;
> >
> >                 try {
> >                         connect   = getConnection();
> >                         statement = connect.createStatement();
> >                         statement.executeQuery("select " +
>getSequenceName() + ".nextval from
> > DUAL");
> >                         results = statement.getResultSet();
> >                         if ((results != null) && (results.next()))
> >                         {
> >                                 FoodId   = new Integer(
>results.getInt(1) );
> >                         }
> >                         else {
> >                                 throw new CreateException ("ejbCreate:
>sequence failed to return a
> > value");
> >                         }
> >                 }
> >                 catch (SQLException sqe) {
> >                         throw new CreateException (sqe.getMessage());
> >                 }
> >                 finally {
> >                         if (statement != null) statement.close();
> >                         if (results   != null) results.close();
> >                         connect.close();
> >                 }
> >                 return FoodId;
> >         }
> >
> > >From: "Atul Kulkarni(CTS)" <[EMAIL PROTECTED]>
> > >Reply-To: A mailing list for Enterprise JavaBeans development
> > ><[EMAIL PROTECTED]>
> > >To: [EMAIL PROTECTED]
> > >Subject: Re: DB Generated Primary Key
> > >Date: Wed, 5 Jul 2000 11:53:23 +0530
> > >
> > >As I did not receive any post on this do I consider that there is no
> > >solution to this problem? Any hint will suffice.
> > >
> > >Regards,
> > >Atul.
> > >
> > >-----Original Message-----
> > >From: Atul Kulkarni(CTS) [mailto:[EMAIL PROTECTED]]
> > >Sent: Saturday, July 01, 2000 2:17 AM
> > >To: [EMAIL PROTECTED]
> > >Subject: DB Generated Primary Key
> > >
> > >
> > >Hi all:
> > ><Q1>
> > >I have a case where I create many records of type PayObject where the
> > >primary ky is generated by the DB itself. If in this case I want to map
>an
> > >entity bean to this table, how do I do it?
> > >
> > >Also in the database there are some other records being inserted in the
> > >same
> > >transaction which hold a reference to PayObject object ( ie have a
>column
> > >which holds the primary Key of PayObject ). So how does the object know
>its
> > >own primary key on creation?
> > ></Q1>
> > >
> > >I am using WL 4.5.1 with Toplink.
> > >
> > >Thanx in advance.
> > >Atul.
> > >
> >
> >===========================================================================
> > >To unsubscribe, send email to [EMAIL PROTECTED] and include in the
>body
> > >of the message "signoff EJB-INTEREST".  For general help, send email to
> > >[EMAIL PROTECTED] and include in the body of the message "help".
> > >
> >
> >===========================================================================
> > >To unsubscribe, send email to [EMAIL PROTECTED] and include in the
>body
> > >of the message "signoff EJB-INTEREST".  For general help, send email to
> > >[EMAIL PROTECTED] and include in the body of the message "help".
> > >
> >
> > ________________________________________________________________________
> > Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com
> >
> >
>===========================================================================
> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the
>body
> > of the message "signoff EJB-INTEREST".  For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".

________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com

===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST".  For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".

Reply via email to