EJB: creación de un CMP con autoincremento de la clave

manu
11 de Enero del 2005
Necesito crear un bean Asignatura, cuya clave se debe generar automáticamente. Tengo en AsignaturaBean:

public AsignaturaPK ejbCreate(String nombre, int creditos) throws CreateException {
setNombre(nombre);
setCreditos(creditos);
return new AsignaturaPK(getAsignaturaID());
}

Lo llamo desde un bean de sesión que tiene el método:

public void creaAsignatura(String nombre,int creditos) {
AsignaturaLocalHome asigHome = null;
AsignaturaLocal asigLocal;

try {
Context ctx = new InitialContext(System.getProperties());
asigHome = (AsignaturaLocalHome) ctx.lookup("LocalAsignaturaBeanJNDI_71633068");
asigLocal = asigHome.create(nombre,creditos);
...
}
...
}

Como resultado, me crea un registro en la BD mysql con una clave 0, y al retornar de "asigHome.create()"
me sale la excepción:

13:26:55,796 ERROR [LogInterceptor] TransactionRolledbackLocalException in method: public abstract uo.server.interfaces.AsignaturaLocal uo.server.interfaces.AsignaturaLocalHome.create(java.lang.String,int) throws javax.ejb.CreateException, causedBy:
javax.ejb.EJBException: getGeneratedKeys returned an empty ResultSet

Además, en sucesivas creaciones me crea la misma clave, obteniendo la siguiente excepción:

13:50:39,375 ERROR [AsignaturaEJB_71633068] Could not create entity
java.sql.SQLException: Duplicate key or integrity constraint violation, message from server: "Duplicate entry '0' for key 1"

En el fichero jbosscmp-jdbc.xml tengo lo siguiente:

...
<entity>
<ejb-name>AsignaturaEJB_71633068</ejb-name>
<table-name>Asignaturas</table-name>
<cmp-field>
<field-name>asignaturaID</field-name>
<column-name>id</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INT</sql-type>
<auto-increment/>
</cmp-field>
<cmp-field>
<field-name>nombre</field-name>
<column-name>nombre</column-name>
<jdbc-type>VARCHAR</jdbc-type>
<sql-type>VARCHAR(30)</sql-type>
</cmp-field>
<cmp-field>
<field-name>creditos</field-name>
<column-name>creditos</column-name>
<jdbc-type>INTEGER</jdbc-type>
<sql-type>INT</sql-type>
</cmp-field>
<entity-command name="get-generated-keys"/>
</entity>
...

¿Alguien sabe si estoy haciendo algo mal o me falta algo por configurar?

Juan
11 de Enero del 2005
Elimina esta línea:
<entity-command name="get-generated-keys"/>
y esta:
<auto-increment/>

Con la primera le estas diciendo al servidor de aplicaciones que las claves se van a autogenerar. Con la segunda le dices a mysql que te ponga el 0 en id.

Espero que tengas suerte.

Un saludo.