EJB: creaci贸n de un CMP con autoincremento de la clave
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?
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?
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.
<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.
