Estoy tratando de insertar una fila en una tabla MySQL y obtener su ID de inserción. Conozco la función MySQL last_insert_id()
, parece que no puedo hacer que funcione. Actualmente, estoy tratando de usar una función anotada como transacción y solo estoy obteniendo 0. Estoy usando Spring 3.1.Spring JdbcTemplate no puede obtener la Id. De inserción de MySQL
@Transactional (propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
private long insertTransactionRecord
(
int custID,
int porID,
String date,
short crvID
) {
m_template.update ("INSERT INTO " +
" transaction " +
"(" +
" por_id, " +
" cust_id, " +
" trans_date, " +
" crv_id " +
") " +
"VALUES " +
"(" +
" ?, " +
" ?, " +
" ?, " +
" ? " +
")",
new Object[] {
porID,
custID,
date,
crvID
});
return m_template.queryForLong ("SELECT " +
" last_insert_id() " +
"FROM " +
" transaction " +
"LIMIT 1");
}
El propósito de la cláusula 'FROM' es especificar la tabla de la que quiero la ID. 'JdbcTemplate' usa la agrupación de conexiones, por lo que no estoy seguro de que esté en la misma conexión. Se suponía que la transacción remediaría esto. Tu sugerencia no ha ayudado, gracias sin embargo. – Nik
use jdbcTemplate.queryForObject ("select last_insert_id()", Integer.class) – singhspk
No creo que ese enfoque sea seguro para subprocesos, ¿o sí? La llamada queryForInt (..) puede tener lugar después de que se hayan realizado varias inserciones y devuelva la ID errónea para la instrucción de inserción que se encuentra encima. –