Sto usando lo spring boot e lo hibernate su jpa. Sto usando l'interfaccia JpaRepository per implementare i miei repository. Come con i seguenti UserRepositorySpring JpaRepository - Stacca e collega l'entità
public interface UserRepository extends JpaRepository<User, Long> {
}
che voglio raggiungere seguente
- carico un'entità utente.
- Modificare lo stato dell'oggetto entità ad es. user.setName ("foo")
- Effettua una chiamata al servizio web di sistema esterno. Salva il risultato della chiamata in DB
- Solo in caso di risposta positiva di questa chiamata al servizio web, salvare il nuovo stato dell'utente nel repository.
Tutti i passaggi sopra descritti non si verificano in una transazione, ovvero la chiamata di servizio esterna è fuori servizio.
Quando si salva il risultato del servizio web in DB tramite il repository, vengono salvate anche le modifiche in Entità utente. Secondo la mia comprensione, ciò è dovuto al flusso del contesto di persistenza di underlaying al punto 3. Dopo alcuni google, penso di poter raggiungere il mio scopo, se riesco a staccare la mia entità utente al punto uno e ricollegarlo al punto 4. Per favore confermare se la mia comprensione è corretta e come posso ottenere questo? Non c'è un metodo nell'interfaccia JpaRepository per staccare un'entità.
seguito è riportato il codice per illustrare
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
}
Grazie
È necessario inserire il codice corrente per i passaggi da 1 a 4 (per chiarire) –
Sarebbe possibile effettuare chiamate nel seguente ordine: 1,3,4,2? – BlueLettuce16