Bonjour,
Je te remercie d’abord pour ta réponse.
Mon application est développée en utilisant le framework spring et hibernate.
Mon dao est instancié dans le fichier d’application contexte du spring.
Mon entité bean a des propriétés suivantes :
Code:
@SuppressWarnings("serial")
@Entity()
@Table(name = "produit")
public class Produit implements Serializable {
@Id()
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_produit")
private int id;
@Length(max = 10)
@Column(nullable = false, unique = true)
private String reference;
@Length(max = 255)
@Column(nullable = true)
private String image;
@Length(max = 255)
@Column(nullable = false)
private String nom;
//….. les getters et setters des propriétés.
}
Dans mon Dao, j’ai une fonction qui permet de mettre à jour mon produit, cette fonction est développée comme suivante
Code:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public Produit enregistrer(Produit produit) {
//.........
try {
if (produit.getId() == 0) {
em.persist(produit);
} else {
produit = em.merge(produit);
}
} catch (Exception e) {
log.error("impossible enregistrer le produit : " + produit.getReference(), e);
}
//.........
return produit;
}
Cette fonction est appelée lors d’un import des produits à partir d’un fichier XML. Dans ce dernier, il y a plus de 1000 produits à importer. Le merge fonctionne pour certain produit et non pas tous les produits. J’ai testé un produit seul dans le fichier XML, n’ayant pas été mis à jour dans la base de données, le merge fonctionne et met bien à jour mon objet dans la base de données. Puis, 10 produits et 100 produits, le merge fonctionne toujours bien. Je passe à plus de 1000 produits, le merge ne fonctionne que pour certain produit. Pourtant, j’ai loggué mes objets avant et après le merge, les propriétés contiennent bien une valeur.
N’hésite pas à me poser d’autres questions si tu en as, si jamais ma réponse n’est pas suffisante.