En ce moment j'utilise entitymanager pour insérer la liste de l'entité objet à la base de données avec mon dao en utilisant un code comme celui-ci.Hibernate EntityManager persist() et le nombre de trajets aller-retour de la base de données
@Transaction
public void insertBatch(List<EntityObject> o){
for(int i=0;i<o.size();i++){
em.persist(o);
if(o.size % 100 == 0){ //equal to JDBC batch size
em.flush();
em.clear();
}
}
}
Et quand je surveille l'instruction SQL par ajouter ceci dans l'application contexte
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
</bean>
</property>
Et le résultat dans la console ressemblera à ceci
Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?)
Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?)
...
...
...//untill reach 100 lines.
Hibernate: insert into TABLE (FIELD1, FIELD2) values (?, ?)
Ma question est. Cela signifie-t-il que chaque fois que j'appelle cette méthode, il va faire un aller-retour avec la base de données pour 100 fois, ou est-ce seulement 1 aller-retour, ou autre?
Toute réponse ou information serait appréciée.
Merci.
Ajoutez simplement une instruction de journal avant l'appel à flush() et vous verrez par vous-même. –