Maison >Java >javaDidacticiel >Comment corriger l'erreur « L'objet fait référence à une instance transitoire non enregistrée » d'Hibernate ?
Correction de l'erreur « L'objet fait référence à une instance transitoire non enregistrée » d'Hibernate
L'erreur « L'objet fait référence à une instance transitoire non enregistrée » dans Hibernate se produit lors de la tentative pour enregistrer un objet avec des objets associés non enregistrés sans spécifier correctement la cascade opérations.
Cause :
Cette erreur se produit lorsqu'une entité possède une propriété de collection qui contient de nouvelles instances qui n'ont pas encore été enregistrées dans la base de données. Hibernate tente d'enregistrer automatiquement ces nouvelles instances lorsque l'objet parent est persistant, mais échoue si l'attribut cascade n'est pas défini correctement.
Solution :
Pour résoudre ce problème , vous devez spécifier l'attribut cascade sur votre mappage de collection. Cela indique à Hibernate d'enregistrer automatiquement les objets associés lorsque l'objet parent est enregistré.
Si vous utilisez le mappage XML, ajoutez ce qui suit à votre mappage de collection :
<set name="relatedObjects" inverse="true" cascade="all"> <key column="parent_id"/> <one-to-many class="RelatedObject" column="related_id"/> </set>
Si vous utilisez des annotations, ajoutez le suivant votre propriété de collection :
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) private Set<RelatedObject> relatedObjects;
En spécifiant cascade=all, vous demandez à Hibernate de conserver les objets associés avec l'objet parent dans une seule transaction. Cela garantit que tous les objets nécessaires sont enregistrés dans la base de données et que l'erreur « instance transitoire non enregistrée » est évitée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!