La strategia di generazione dell'ID è fondamentale per l'inserimento batch in Hibernate. In particolare, la generazione dell'IDENTITÀ di solito non lavoro (notare che AUTO in genere esegue il mapping anche a IDENTITY). Questo perché durante l'inserimento batch Hibernate ha un flag chiamato "requiresImmediateIdAccess" che dice se gli ID generati sono immediatamente richiesti o meno; in tal caso, l'elaborazione batch è disabilitata.
Puoi facilmente individuarlo nei registri a livello di DEBUG quando dice "esecuzione immediata dell'inserimento dell'identità":ciò significa che ha saltato l'elaborazione batch perché è stato detto che gli ID generati sono necessari immediatamente dopo l'inserimento.
Strategie di generazione che in genere fanno lavoro sono TABLE e SEQUENCE, perché Hibernate può pre-generare gli ID, consentendo così l'inserimento batch.
Un modo rapido per capire se il tuo inserimento batch funziona è attivare i log a livello di DEBUG poiché BatchingBatcher ti dirà esplicitamente la dimensione del batch che sta eseguendo ("Executing batch size:" + batchSize ).
Inoltre, le seguenti proprietà sono importanti per ottenere l'inserimento batch. Non oso dire che siano necessari in quanto non sono abbastanza esperto di Hibernate per farlo - forse è solo la mia configurazione particolare - ma nella mia esperienza erano comunque necessari:
hibernate.order_inserts = true
hibernate.order_updates = true
Queste proprietà sono documentate piuttosto male, ma credo che ciò che hanno fatto sia stato consentire il raggruppamento corretto delle istruzioni SQL INSERT e UPDATE per l'esecuzione batch; Penso che questi potrebbero essere gli inserti a più righe che stai cercando. Non spararmi se sbaglio su questo, sto ricordando a memoria.
Andrò anche avanti e presumo che tu imposti la seguente proprietà; in caso contrario, questo dovrebbe servire come promemoria:
hibernate.jdbc.batch_size = xx
Dove xx è la dimensione del lotto desiderata, naturalmente.