Próbuję wstawić wiersz do tabeli MySQL i uzyskać identyfikator wstawki. Zdaję sobie sprawę z funkcji MySQL last_insert_id()
, po prostu nie mogę tego zmusić do działania. Obecnie próbuję użyć funkcji oznaczonej jako transakcja i otrzymuję tylko 0 zwróconych. Używam Spring 3.1.Spring JdbcTemplate Nie można uzyskać wstawienia identyfikatora z 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");
}
Celem klauzuli "OD" jest określenie tabeli, z której chcę mieć identyfikator. 'JdbcTemplate' używa łączenia połączeń, więc nie mam gwarancji, że znajduje się w tym samym połączeniu. Transakcja miała temu zaradzić. Twoja sugestia nie pomogła, dzięki. – Nik
użyć jdbcTemplate.queryForObject ("select last_insert_id()", Integer.class) – singhspk
Nie sądzę, że to podejście byłoby bezpieczne dla wątków, prawda? Wywołanie queryForInt (..) może nastąpić po wykonaniu wielu wstawień i zwróceniu niewłaściwego identyfikatora dla instrukcji insert powyżej. –