1 Reply Latest reply: Mar 17, 2006 10:43 AM by Thomas Termin RSS

    EntiyBean and auto-increment

    Marcel Odendahl Newbie

      Hi,

      after reading a lot of stuff about the item. I don't know what is the
      right way.
      Here is my problem.
      I'm using Jboss 4.0.3 with a MySQL 4.1 with tables which use
      the serial type as primary key.
      I want to use entity beans which make use of the auto-increment feature.
      I'm using xdoclet. Before I start I want to know which is the right way.
      These are the things I found.
      1. Solution
      In the head of the bean

       * @jboss.entity-command name="mysql-get-generated-keys"
       *
       * @jboss.unknown-pk class="java.lang.Integer"
       * auto-increment="true"
      

      Do I have do declare the column of the table with the primary key
      as field in the bean?

      The create method looks like
      /**
       * @ejb.create-method
       * @return Primary Key
       * @throws CreateException
       */
       public Integer ejbCreate() throws CreateException {
       return null;
       }
      
       public void ejbPostCreate() {
      
       }
      


      2. Solution
      I only declare in the head of the bean the following
       * @jboss.entity-command name="mysql-get-generated-keys"
       *
      


      And the method declaration for the primary key is
       /**
       * Getter for CMP Field id
       *
       * @ejb.pk-field
       * @ejb.persistent-field
       * @ejb.interface-method view-type="both"
       *
       * @jboss.persistence auto-increment="true"
       *
       */
       public abstract java.lan.Integer getId();
      

      The create method looks the same as in solution 1.

      What is the right way?

      Another problem is how can I access the bean when the key is
      autogenerated? The create method delivers a null.
      How can I access the generated key?

      Thanks in advance,

      Marcel.

        • 1. Re: EntiyBean and auto-increment
          Thomas Termin Newbie

          Hello,

          this is a possible solution for me:

          /**
           * @ejb.bean name="Example"
           * display-name="Name for Example"
           * description="Description for Example"
           * jndi-name="ejb/Example"
           * type="CMP"
           * cmp-version="2.x"
           * view-type="local"
           * primkey-field = "autoIncField"
           *
           * @ejb.pk class = "java.lang.Integer" generate = "false"
           *
           * @jboss.unknown-pk class = "java.lang.Integer"
           * column-name = "autoIncField"
           * jdbc-type = "INTEGER"
           * sql-type = "INTEGER"
           * auto-increment = "true"
           *
           *
           * @jboss.entity-command name = "mysql-get-generated-keys"
           * class = "org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCMySQLCreateCommand"
           *
           */
          public abstract class ExampleBean implements EntityBean {
          
           // more methods
          
          /**
           * Getter for CMP Field autoIncField
           *
           * @ejb.pk-field
           * @ejb.persistent-field
           * @ejb.interface-method view-type="local"
           *
           * @jboss.persistence auto-increment = "true"
           *
           */
           public abstract java.lang.Integer getAutoIncField();
          
           /**
           * Setter for CMP Field autoIncField
           *
           *
           * @ejb.interface-method view-type="local"
           */
           public abstract void setAutoIncField(java.lang.Integer value);
          }
          


          This works for me.

          How would you access a row in a table with a generated PK with a simple sql statement if you don't have the key value. I guess you have some other data in the row for a search criteria. I hope you know what I mean.

          Thomas