Bonjour,
J'ai une application Java Spring Boot qui consulte une API externe faisant un retour en JSON. Ce retour JSON est parsé en objet Java à l'aide de Jackson. Cet objet est relativement complexe, il possède plusieurs liens (@OneToMany, @ManyToOne...) avec d'autres objets. Les ID des objets ne sont pas transmis dans le retour de l'API, ils sont généré par ma base MariaDB.
Mon problème provient dans cette liaison de donnée, j'ai des objets fils qui sont déjà présents en base. Par exemple, un objet "Catégorie" est lié à un "Produit", le produit n'existe pas encore en base mais la catégorie elle oui. J'utilise @Cascade.Persist pour sauvegarder l'objet Produit en base ce qui implique la persistance de Catégorie. Mon objet Catégorie possède un "Nom" en champs que j'ai défini en @NaturalId. Ma sauvegarde s'effectue à l'aide de la méthode save() de la classe ProduitRepository qui extend CrudRepository, elle même utilisé dans ProduitService.
Quand je tente de sauvegarder, j'ai un problème de duplication de donnée sur l'ID nom, c'est normal étant un id naturel, il doit être unique.
Si je récupère l'objet Catégorie en base (à l'aide de CategorieRepository) et que je le place comme fils de l'objet Produit, j'ai une erreur comme quoi mon objet est détaché de sa session. Je ne suis pas hyper calé en transaction mais j'imagine que la session CategorieRepository n'est pas la même que ProduitRepository.
J'ai des lacunes dans le fonctionnement d'Hibernate dans le contexte Spring boot et je ne sais pas quelle est la bonne méthode à appliquer pour résoudre mon problème. Si vous avez des pistes je suis preneur, merci !
Partager