60 votes

Détacher une entité du contexte de persistance JPA/EJB3

Quel serait le moyen le plus simple de détacher un Bean d'entité JPA spécifique qui a été acquis par le biais d'un EntityManager. Ou encore, pourrais-je faire en sorte qu'une requête renvoie des objets détachés dès le départ, afin qu'ils agissent essentiellement en "lecture seule" ?

La raison pour laquelle je veux faire cela est que je veux modifier les données à l'intérieur du bean - dans mon application seulement, mais sans jamais les faire persister dans la base de données. Dans mon programme, je dois éventuellement appeler flush() sur l'EntityManager, qui persisterait toutes les modifications des entités attachées à la base de données sous-jacente, mais je veux exclure des objets spécifiques.

1voto

Chris B Points 318

Dans JPA 1.0 (testé en utilisant EclipseLink) vous pouviez récupérer l'entité en dehors d'une transaction. Par exemple, avec des transactions gérées par conteneur, vous pouviez faire :

public MyEntity myMethod(long id) {
    final MyEntity myEntity = retrieve(id);
    // myEntity is detached here
}

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public MyEntity retrieve(long id) {
    return entityManager.find(MyEntity.class, id);
}

0voto

Si vous êtes ici parce que vous voulez réellement faire passer une entité à travers une frontière distante, alors vous avez juste mis un code pour tromper l'hibernation.

for(RssItem i : result.getChannel().getItem()){
}

Cloneable ne fonctionnera pas car il copie réellement le PersistantBag à travers.

Et oubliez l'utilisation des flux sérialisables et bytearray et des flux pipés. La création de threads pour éviter les blocages tue le concept entier.

-1voto

trunikov Points 1

Je pense que vous pouvez également utiliser la méthode EntityManager.refresh(Object o) si la clé primaire de l'entité n'a pas été modifiée. Cette méthode restaurera l'état original de l'entité.

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