Você está usando GenerationType.IDENTITY para sequenciamento, o que requer a recuperação dos IDs de cada instrução de inserção, um por um. Experimente um esquema de sequenciamento que permita a pré-alocação em lotes de 500 e você verá melhorias:http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Identity_sequencing