0 Replies Latest reply on Feb 5, 2005 3:39 AM by staplecross

    CMP 2.0 with oracle-sequence and composite primary key

    staplecross

      Hi All,

      I want to use the CMP 2.0 that would work with the oracle database sequence...
      I m using Jboss 4.0.1 as my application server.

      I have successfully used the Oracle sequence with my CMP 2.0, ....but it works only when the primary key is a single field primary key and not a composite key for which PrimaryKeyClass would have to be used.
      Example when the primary key is a single field::

      in ejb-jar.xml::==>

      <prim-key-class>java.lang.Integer</prim-key-class>
      <primkey-field>no</primkey-field>

      in the jbosscmp-jdbc.xml file ::==>

      <unknown-pk>
      <unknown-pk-class>java.lang.Integer</unknown-pk-class>
      <field-name>no</field-name>
      <column-name>NO</column-name>
      <jdbc-type>Integer</jdbc-type>
      <sql-type>Integer</sql-type>
      <auto-increment/>
      </unknown-pk>
      <entity-command name="oracle-sequence">
      tempseq
      </entity-command>

      Here <field-name>no</field-name> is my field on which oracle-sequence is applied....and so that I dont have to pass
      that field while calling create method of the bean (CMP 2.0)...

      The problem I face is that in one of the tables, the primary key is a composite key, constituting of 4 fields. On one of the fields out of these, the oracle-sequence is to be applied. But the above described method does not work in the case of composite primary key. Could some one please help me out in this ?

      the ejb-jar.xml file has the following entry for the primary key class::==>
      <prim-key-class>com.business.process.EjbTwoPK</prim-key-class>

      in the jbosscmp-jdbc.xml file the entry for the field on which sequence is applied, is::==>
      <unknown-pk>
      <unknown-pk-class>com.business.process.EjbTwoPK</unknown-pk-class>
      <field-name>emailId</field-name>
      <column-name>EMAIL_ID</column-name>
      <jdbc-type>Integer</jdbc-type>
      <sql-type>Integer</sql-type>
      <auto-increment/>
      </unknown-pk>
      <entity-command name="oracle-sequence">
      MT_REQ_EMAIL_ID_SEQ
      </entity-command>

      But with above configuration, at deployment time, I get following exception ................. ==>

      org.jboss.deployment.DeploymentException: Generation only supported with single PK field
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.getGenerated
      PKField(JDBCAbstractCreateCommand.java:160)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCIdentityColumnCreateCommand.initGe
      neratedFields(JDBCIdentityColumnCreateCommand.java:46)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCAbstractCreateCommand.init(JDBCAbs
      tractCreateCommand.java:84)
      at org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCOracleCreateCommand.init(JD
      BCOracleCreateCommand.java:37)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCCommandFactory.createCreateEntityC
      ommand(JDBCCommandFactory.java:151)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.startStoreManager(JDB
      CStoreManager.java:466)
      at org.jboss.ejb.plugins.cmp.jdbc.JDBCStoreManager.start(JDBCStoreManage


      Please guide me in using Oracle-sequence with CMP 2.0 EntityBean when the primary key is composite key and the application server used is JBoss 4.0.1.

      Thanks in advance,