Diese "Blöcke" sind einerseits sog. Batches, und andererseits deine Transaktionen, je nachdem, wieviel Statements da drinnen sind, ändert sich deren größe.
Die optimale Transaktionensgröße herauszufinden ist wichtig, diese hängt auch von der DB Konfig. ab, Transaktionen laufen meist auf temp. Tabellen, DBs haben die max. größe der Temp tabellen konfuguriert.
D.h. aber auch, dass u.U. nicht alles rückgängig (Rollback) gemacht werden kann.
Die Hibernate Doku hat ein extra Kapitel für batch inserts und deren konfiguration (
Chapter 13. Batch processing), query caching abschalten kann auch helfen bei Speicehrproblemen (OutOfMemoryException)
Prinzipiell werden zwar 50000 inserts gemacht, diese könnten aber auch in "nur" 500 "Blöcken" (Batches) gesendet werden, wichtig wäre, ob nach jedem insert wieder selects ausgeführt werden müssten.
IMHO (aber geraten und nicht gemessen): 10000 Einträge in 2 Tabellen mit 1:1 Mapping sollten kein Problem darstellen, vorrausgesetzt es passiert nicht alle paar Minuten, aber wie gesagt, ist geraten/dahergeredet, Messen & testen für den Proof of Concept wäre da immer angesagt.
Das Problem mit normalen JDBC bzw. gleich das SQL Script in der DB ausführen am ORM vorbei ist bekannt, das ORM kennt die Änderungen nicht, müsste vorher erst runtergefahren werden.