Bonjour,
Je suis en train de protoyper une appli qui persiste un objet Java dans une base de donnée relationnel via JPA (EclipseLink).
L'idée est de mesurer les performances pour un grand nombre d'insertion à la suite (environ 300000 voir plus)

Voici un le code en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
  for (int i = 0; i <300000; i++) {
	 if(!em.isOpen()){
		em = factory.createEntityManager(); //On utilise un EntityManager par batch (cf la doc EclipseLink sur l'optimisation des écritures 
		em.getTransaction().begin(); 
	}
	Person person = new Person();
	person.setFirstName("Jim_" + i);
	person.setLastName("Knopf_" + i);
	em.persist(person);
	person = null;
 
         if(i%10000 == 0){ //Commit toutes les 10 000 insertions
		 em.getTransaction().commit();
		 em.close();
	}
}
Ce code explose ma java heap memory.
Existe-t-il des méthodes (des patterns) pour faire ce genre manipulation avec JPA le plus efficacement possible ?

Pour info : j'ai un second proto 100% JDBC qui éxécute cet insertion en environ 6-7s sur ma machine (avec SQLite). Puis-je espérer obtenir des performances se rapprochant (disons environ 10-15s) avec une solution à base de JPA ?

Cordialement