Printemps JpaRepository - Attacher et Détacher entité

Je suis en utilisant le printemps de démarrage et mise en veille prolongée de plus de jpa. Je suis à l'aide de JpaRepository interface pour mettre en place mes dépôts. Comme avec la suite UserRepository

public interface UserRepository extends JpaRepository<User, Long> {
}

Je veux réaliser suivant

  1. Charger une entité Utilisateur.
  2. Modifier l'état de l'entité objet, par ex. de l'utilisateur.setName("foo")
  3. Faire un système externe d'un webservice appel. Enregistrer le résultat de l'appel en DB
  4. Uniquement sur le succès de la réponse de ce webservice appel, enregistrer le nouvel état de l'utilisateur dans le dépôt.

Toutes les étapes ci-dessus ne sont pas produit dans une transaction, c'est à dire le service externe appel de transaction.

Lorsque je sauvegarde mon webservice résultat en DB par l'intermédiaire de son référentiel, mes changements de l'Utilisateur de l'entité sont également enregistrées. Selon ma compréhension, c'est en raison de la consommation de sous-tendre le contexte de persistance à l'étape # 3. Après quelques google, je pense que je peux atteindre mon but, si je peux détacher mon entité user de la première étape et la rattacher à l'étape 4.
S'il vous plaît confirmer si ma compréhension est correcte et comment je peux faire? Il n'y a pas de méthode dans JpaRepository interface de détacher une entité.

Voici le code pour illustrer

public void updateUser(int id, String name, int changeReqId){
    User mUser = userRepository.findOne(id); //1
    mUser.setName(name); //2

    ChangeRequest cr = changeRequestRepository.findOne(changeReqId);
    ChangeResponse rs = userWebService.updateDetails(mUser); //3

    if(rs.isAccepted()){
        userRepository.saveAndFlush(mUser); //4
    }

    cr.setResponseCode(rs.getCode());
    changeRequestRepository.saveAndFlush(cr); //this call also saves the changes at step 2
}

Grâce

Vous devriez poster votre code actuel pour les étapes 1 à 4 (à préciser)
Serait-il possible de faire des appels dans l'ordre suivant: 1,3,4,2?

OriginalL'auteur amique | 2014-11-07