2010-03-11 9 views
10

Sto usando JDBC e voglio inserirli in gruppo, ma ho bisogno dei tasti generati per il prossimo giro di inserti - c'è comunque per farlo?Esiste comunque un modo per ottenere i tasti generati quando si utilizza Spring JDBC batchUpdate?

MapSqlParameterSource[] batchArgs ....

DAL.getNamedParameterTemplate().batchUpdate("INSERT INTO...", batchArgs);

Grazie

+0

Ho trovato la tua domanda perché sto cercando di fare la stessa cosa, ma il batchUpdate di primavera prende un BatchPreparedStatementSetter e non riesco a capire come fare a restituire le chiavi generate. Mi chiedo se in qualche modo devi farlo tu stesso usando le funzioni jdbc addBatch con le funzioni Spring jdbcTemplate. Hai trovato una risposta alla tua domanda? – titania424

risposta

0

Usa db sequences per afferrare il prossimo valore della chiave primaria e lo usano nella dichiarazione dell'inserto.

+1

come posso usarlo con la molla? – MalcomTucker

+0

qualcosa in questo modo: selezionare seq.nextval in nextPrimaryKeyValue –

+0

Questo approccio non è atomico a meno che non si faccia tutto in una transazione (che dovrebbe bloccare l'intera tabella, nemmeno vicino a una soluzione ideale). Penso che quello che sta chiedendo MalcomTucker sia se tu possa o meno farlo come passare KeyHolder ad una delle API spring update(). –

7

Struttura a molla persone attempted a solution a questo problema. Ma hanno abbandonato il tentativo quando è diventato evidente che non c'è modo di garantire che la soluzione funzioni con tutti i driver JDBC. Questo perché le specifiche JDBC non garantiscono che le chiavi generate saranno rese disponibili dopo un aggiornamento batch. I driver JDBC sono liberi di implementare questa funzionalità come meglio credono. In alcuni casi il database sottostante potrebbe non restituire i tasti generati rendendo impossibile per il driver supportare questa funzionalità.

Quindi, anche se si sta lavorando direttamente con JDBC, è necessario verificare se il database e il driver JDBC rendono disponibili le chiavi generate.

Mi ricordo che sono riuscito a ottenere questo risultato con il driver JDBC di MySQL 5.0 con qualche sforzo, ma non ho mai integrato la soluzione nella nostra applicazione di produzione, poiché abbiamo dovuto supportare anche le versioni precedenti di MySQL.

Problemi correlati