Maison >Java >javaDidacticiel >Comment réparer l'exception PersistentObjectException d'Hibernate avec des entités détachées ?

Comment réparer l'exception PersistentObjectException d'Hibernate avec des entités détachées ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 14:39:10520parcourir

How to Fix Hibernate's PersistentObjectException with Detached Entities?

Correction de PersistentObjectException dans Hibernate avec des entités détachées

Lorsque vous traitez des modèles d'objets persistants JPA, certaines opérations peuvent entraîner l'PersistentObjectException , notamment lors de la gestion des relations. Par exemple, dans le cas d'une relation plusieurs-à-un entre un Compte et plusieurs Transactions, une tentative de persistance d'une Transaction avec un compte déjà persistant peut déclencher cette exception.

Comprendre le problème sous-jacent est crucial. Lorsque vous créez une transaction et spécifiez un compte existant, le compte est considéré comme détaché du gestionnaire d'entité. Cela se produit parce que vous récupérez le compte à partir d'un contexte différent de celui dans lequel la transaction est conservée.

Pour résoudre ce problème, ajustez le type de cascade dans l'annotation de la transaction sur CascadeType.MERGE. Cela garantit que lorsque la transaction est conservée, le compte associé sera fusionné dans le contexte actuel du gestionnaire d'entité, résolvant ainsi le problème de détachement.

Voici un extrait de code mis à jour :

@Entity
public class Transaction {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @ManyToOne(cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER)
    private Account fromAccount;
}

En implémentant Ces modifications, vous pourrez conserver avec succès les transactions avec des comptes déjà persistants, en éliminant l'exception PersistentObjectException.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn