[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. En Oracle este comportamiento no se sigue: 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;
}

