Cómo persistir muchas entidades (JPA)
Necesito procesar un archivo CSV y para cada registro (línea) persiste una entidad. En este momento, lo hago de esta manera:
while ((line = reader.readNext()) != null) {
Entity entity = createEntityObject(line);
entityManager.save(entity);
i++;
}
donde elsave(Entity)
l método @ es básicamente solo unEntityManager.merge()
llamada. Hay alrededor de 20,000 entidades (líneas) en el archivo CSV. ¿Es esta una forma efectiva de hacerlo? Parece ser bastante lento. ¿Sería mejor usarEntityManager.persist()
? ¿Es esta solución defectuosa de alguna manera?
EDITA
Es un proceso largo (más de 400 s) y probé ambas soluciones, conpersist
ymerge
. Ambos tardan aproximadamente la misma cantidad de tiempo en completarse (459s frente a 443s). La pregunta es si guardar las entidades una por una como esta es óptimo. Hasta donde sé, Hibernate (que es mi proveedor de JPA) implementa algunas funciones de caché / vaciado, por lo que no debería tener que preocuparme por esto.