Est-ce que supprime la méthode (entité d'objet) de EntityManager ne fonctionne que sur les objets obtenus de trouver la méthode ()?
J'ai l'extrait de code suivant:
public void deletePerson() {
EntityManager em = getEntityManager();
Person p = new Person("x", "y", 200);
em.remove(p);
}
Mais il ne supprime pas l'entrée particulière de la base de données.
Quand j'ai essayé quelque chose comme ci-dessous:
public void deletePerson() {
EntityManager em = getEntityManager();
Person p = em.find(Person.class, 200);
em.remove(p);
}
Ça marche bien.
Citant le manuel d'ObjectDB sur suppression des objets d'entité JPA :
Pour supprimer un objet de la base de données, il doit d'abord être récupéré (quel que soit le chemin), puis dans une transaction active, il peut être supprimé à l'aide de la méthode remove.
Une exception IllegalArgumentException est levée par remove si l'argument n'est pas une instance d'une classe d'entités ou s'il s'agit d'une entité détachée.
Lors de la création d'un objet avec l'opérateur new
, il devient une entité détachée, vous devez le conserver si vous souhaitez le supprimer.
Lorsque vous récupérez l'entité, vous récupérez l'entité persistante.
Quelque chose dans cette direction. EntityManager.remove ne fonctionne que pour les entités gérées. Peu importe comment vous avez obtenu ces entités gérées, cela peut être par exemple:
Mais simplement créer un nouvel objet et essayer de le supprimer ne fonctionne pas, car ce nouvel objet n'est pas une entité gérée. L'entité ne doit pas non plus être encore détachée.
La vie de l'entité est sensiblement la suivante, toutes dans la même transaction (les entités en dehors de leur transaction ne sont pas gérées):
Entity ent = new Entity(1); //entity is in new state, EntityManager never know
//anything about it
em.persist(ent); //entity is managed as long as not disconnected
//from EntityManager
em.clear(); // all previously managed entities, including ent, are now detached
Entity same = em.find(1); //managed same
em.remove(same); // entity is removed
Oui, en cas d'opération de fusion ou de suppression, vous devez utiliser une opération find (), puis utiliser la méthode remove sur l'entité récupérée.