738 votes

objet fait référence à une instance transitoire non enregistrée - enregistrer l’instance transitoire avant rinçage

Je reçois la suite erreur quand j’ai enregistrer l’objet en utilisant hibernate

objet fait référence à une instance transitoire non enregistrée - enregistrer l’instance transitoire avant rinçage

Est-ce que vous pouvez m'aider ?

939voto

Bozho Points 273663

Vous devez inclure (si vous utilisez xml) ou (si vous utilisez les annotations) sur la cartographie de votre collection.

Cela arrive parce que vous avez une collection dans votre entité, et que la collection comporte un ou plusieurs éléments qui ne sont pas présents dans la base de données. En spécifiant les options ci-dessus que vous dire mise en veille prolongée pour sauvegarder la base de données lors de l’enregistrement de leur parent.

303voto

McDonald Noland Points 161

Je crois que ce pourrait être juste répéter la réponse, mais juste pour clarifier, j'ai eu ce sur un OneToOne cartographie ainsi qu'un OneToMany. Dans les deux cas, c'était le fait que l'objet Enfant j'étais en ajoutant à la société Mère n'a pas été enregistré dans la base de données. Alors, quand j'ai ajouté de l'Enfant de la Mère, puis enregistré le Parent, Hibernate jetait les "références de l'objet sauvegardé transitoire exemple - pour enregistrer l'instance éphémère avant de tirer la chasse" message lors de l'enregistrement de la société Mère.

Ajout dans la cascade = {CascadeType.TOUS les} sur le Parent de référence à l'enfant de résoudre le problème dans les deux cas. Cela a sauvé l'Enfant et le Parent.

Désolé pour les réponses répétez, je voulais juste clarifier davantage pour les gens.

@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name = "performancelog_id")
public PerformanceLog getPerformanceLog() {
    return performanceLog;
}

77voto

Smithy Points 141

Ce qui se passe lors de l'enregistrement d'un objet quand Hibernate pense qu'il doit enregistrer un objet qui est associé à celui que vous enregistrez.

J'ai eu ce problème et ne souhaitez pas enregistrer les modifications apportées à l'objet référencé, donc je voulais la cascade type d'AUCUN.

L'astuce est de s'assurer que l'ID et la VERSION de l'objet référencé est réglé de telle sorte qu'Hibernate ne pense pas que l'objet référencé est un nouvel objet qui doit économiser. Cela a fonctionné pour moi.

Regarder à travers toutes les relations dans la classe que vous enregistrez pour travailler sur les objets associés (et les objets associés à des objets associés) et de s'assurer que l'ID et la VERSION est définie dans tous les objets de l'arborescence de l'objet.

22voto

dukethrash Points 100

Cela s’est produit pour moi lors de la persistance d’une entité dans laquelle l’enregistrement existant dans la base de données a une valeur NULL pour le champ annoté avec @Version (pour le verrouillage optimiste). Mise à jour la valeur NULL à 0 dans la base de données corrigé cela.

12voto

nanospeck Points 357

Ce n’est pas la seule raison de l’erreur. J’ai rencontré tout à l’heure pour une erreur de frappe dans mon code, qui, je crois, définissez une valeur d’une entité qui a été déjà enregistrée.

J’ai repéré l’erreur en trouvant exactement quelle variable a provoqué l’erreur (dans ce cas String xid). J’ai utilisé un « catch » autour de l’ensemble du bloc de code qui a sauvé l’entité et imprimé les traces.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X