Si no puedes gobernarte a ti mismo... ¿cómo sabrás gobernar a los demás?
Confucio

[iBATIS] - Insertar Claves en Oracle

next.gifCuando 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;

}

Technorati Tags: ,

Dejanos tu Comentario

Nombre: (Requerido)

E-Mail: (Requerido)

Sitio WEB:

Comentario: