Já tentou com RandomAccessFile ?
[]'s
Isso é o caso extremo de uso do Hibernate para um uso para o qual ele é inadequado.
Para esse tipo de coisa (inserção batch de 300.000 registros) nem o JDBC é adequado; o correto é usar uma ferramenta de importação de dados do próprio banco, e muitas vezes dropar e reconstruir índices, e outras coisas que podem ser feitas para acelerar o carregamento.
Não acho que 300.000 registros levem 2 horas para serem importados…
De qualquer maneira, vejam uma discussão aqui para o Oracle. http://dbaforums.org/oracle/index.php?showtopic=730