[iBATIS] - Insertar Claves en Oracle
Cuando insertamos un registro en una tabla, MySQL automáticamente rellena la clave única con un número entero único que se va autoincrementando. Oracle no: debemos especificarle nosotros la clave con la que insertará el registro.
Podemos utilizar un procedimiento Oracle; o podemos crear una Secuencia que nos irá devolviendo un entero autoincrementándose con cada petición. El pequeño defecto de utilizar esto último es que si la inserción falla o se realiza un rollback de la transacción, no podremos volver a utilizar el código que la secuencia nos devolvió para esta transacción porque Oracle sí hace commit de la select a la secuencia.
Para utilizar con iBATIS las secuencias para obtener los códigos únicos para nuestras claves, podemos utilizar:
<insert id="insertar" parameterClass="persona" >
<selectKey keyProperty="codPersona" resultClass="java.lang.Integer">
SELECT SEQ_PERSONA.NEXTVAL FROM DUAL
</selectKey>
insert into AAI_SOLICITUD_INVESTIGADOR
(COD_PERSONA, …)
values
(#codPersona#, …)
</insert>
De esta forma el método de inserción del DAO nos devolverá un Integer con el código con el que se ha insertado el registro.
Más rupestre pero a veces necesario sería implementar un método en la persistencia (DAO), obtenerSecuenciador(), que nos devuelva el código
<select id="obtenerSecuenciador" resultClass="java.lang.Integer">
SELECT SEQ_ PERSONA.nextval FROM dual
</select>
Y luego en el negocio (BO) insertar el objeto con dicho código. Así podemos manipular, consultar, auditar - los códigos en el negocio.
public Integer insertarPersona (Persona persona){
Integer codPersona = personaDAO.obtenerSecuenciador();
Persona.setCodPersona (codPersona);
personaDAO.insertar (persona);
return codPersona;
}



























