2017-05-11 4 views
0

J'ai deux tables, Utilisateurs et Défis. La table Challegnes possède la colonne currentUsersChallenges qui est une collection un-à-plusieurs avec la table Users. Je souhaite supprimer les relations d'utilisateur actuelles. Je créé une méthode qui suppression, mais lig 9, je ne sais pas pourquoi ..Comment pourrais-je résoudre de supprimer toutes les relations dans la base de données externe backendless?

Challenges table in backendless external database

Méthode d'activité:

final int pageSize = 100; 


    public void deleteChallenges(){ 
     final AsyncCallback<Challenges> updateResponder = new AsyncCallback<Challenges>() 
     { 
     @Override 
     public void handleResponse(Challenges challenge) 
     { 
      System.out.println("Received updated object. Name - " + challenge.getChallengeTitle() + ", relations - " + challenge.getActualUserChallenges().size()); 
     } 

     @Override 
     public void handleFault(BackendlessFault backendlessFault) 
     { 
      System.out.println("Server reported an error - " + backendlessFault.getMessage()); 
     } 
    }; 

    BackendlessDataQuery query = new BackendlessDataQuery(); 
    QueryOptions queryOptions = new QueryOptions(); 
    queryOptions.addRelated("actualUserChallenges"); 
    query.setQueryOptions(queryOptions); 

    query.setPageSize(pageSize); 
    query.setWhereClause("actualUserChallenges.objectId = '"+ backendlessUser.getObjectId() +"'"); 

    Backendless.Data.of(Challenges.class).find(query, new AsyncCallback<BackendlessCollection <Challenges>>() 
    { 

     @Override 
     public void handleResponse(BackendlessCollection<Challenges> response) { 
      for(Challenges challenge : response.getData()) { 
       System.out.println("Loaded object. Name - " + challenge.getChallengeTitle() + ", relations - " + challenge.getActualUserChallenges().size()); 
       for(int temp=0;temp<challenge.getActualUserChallenges().size();temp++) { 

        if(challenge.getActualUserChallenges().get(temp).getObjectId().equals(backendlessUser.getObjectId())) { 
         challenge.getActualUserChallenges().remove(temp); 
        } 
       } 

       Backendless.Data.of(Challenges.class).save(challenge, updateResponder); 
      } 
     } 

     @Override 
     public void handleFault(BackendlessFault backendlessFault) 
     { 
      System.out.println("Server reported an error - " + backendlessFault.getMessage()); 
     } 
    }); 
} 

Répondre

-1

Vous seriez bien mieux à l'aide d'un seul API REST "Bulk Delete" pour supprimer tous les objets correspondant à la clause where spécifiée. Voici le doc (faites défiler jusqu'à la section "Bulk Delete"): https://backendless.com/documentation/data/rest/data_deleting_data_objects.htm

+0

Piler Merci pour votre commentaire. En fait, je ne veux pas utiliser l'API REST, parce que je fais le projet dans le studio android pour android, et je ne connais pas l'API REST ... mais ce problème à résoudre est urgent. Avez-vous une autre solution? – Storg

+0

Je ne sais pas pourquoi il supprime seulement 9, vous devrez déboguer votre code et voir combien d'objets sont retournés. Toutefois, si vous recherchez l'option la plus performante (c'est-à-dire le nombre minimal d'appels d'API), la suppression groupée est la meilleure option. –