Skip to content

Delete Objects from relation

The API removes specific objects from a relationship with their parent.

Blocking API

Integer result = Backendless.Persistence.of( "TABLE-NAME" ).deleteRelation( 
                                                   Map parentObject,
                                                   String relationColumnName,
                                                   Collection<Map> children );
Integer result = Backendless.Persistence.of( E ).deleteRelation( 
                                                   E parentObject,
                                                   String relationColumnName,
                                                   Collection<T> children );

Non-Blocking API

Backendless.Persistence.of( "TABLE-NAME" ).deleteRelation( 
                                             Map parentObject,
                                             String relationColumnName,
                                             Collection<Map> children,
                                             AsyncCallback<Integer> callback );
Backendless.Persistence.of( E ).deleteRelation( 
                                   E parentObject,
                                   String relationColumnName,
                                   Collection<T> children,
                                   AsyncCallback;<Integer> callback );

where:

Argument                Description
TABLE-NAME Name of the table where the parent object is stored.
E Java class of the parent object. The class name identifies the table where the parent object is stored.
parentObject The object for which the relation with the specified children will be deleted. When this argument is an instance of java.util.Map (for the map-based approach), it must contain the "objectId" property.
relationColumnName Name of the column identifying the relation. Relationship between the specified objects from the children collection will be deleted for the column in parentObject.
children A collection of child objects for which the relationship with the parentObject will be deleted.
callback A responder object which will receive a callback when the relation has been deleted or if an error occurs. Applies to the asynchronous method only.

Return Value

Number of child objects for which the relationship has been deleted. The asynchronous call receives the return value through a callback executed on the AsyncCallback object.

Example

The example below deletes a relation between a Person object and its children. The child objects are referenced explicitly in the API call (see the object IDs in the collection as "XXXXX-XXXXX-XXXXX-XXXXX" ``and`` "ZZZZ-ZZZZ-ZZZZZ-ZZZZZ").The relation column is address.

HashMap<String, Object> parentObject = new HashMap<String, Object>();
parentObject.put( "objectId", "41230622-DC4D-204F-FF5A-F893A0324800" );

HashMap<String, Object> childObject1 = new HashMap<String, Object>();
childObject1.put( "objectId", "XXXX-XXXX-XXXX-XXXXX" );

HashMap<String, Object> childObject2 = new HashMap<String, Object>();
childObject2.put( "objectId", "ZZZZ-ZZZZ-ZZZZZ-ZZZZZ" );

ArrayList<Map> children = new ArrayList<Map>();
children.add( childObject1 );
children.add( childObject2 );

Backendless.Data.of( "Person" ).deleteRelation( parentObject, "address", children, 
                                             new AsyncCallback<Integer>()
{
  @Override
  public void handleResponse( Integer howManyObjDeleted )
  {
    Log.i( "MYAPP", "relation has been deleted" );
  }

  @Override
  public void handleFault( BackendlessFault fault )
  {
    Log.e( "MYAPP", "server reported an error - " + fault.getMessage() );
  }
} );
Person personObject = // personObject retrieval is out of scope in this example
Address addressObject1 = // addressObject retrieval is out of scope in this example
Address addressObject2 = // addressObject retrieval is out of scope in this example
ArrayList<Address> addressCollection = new ArrayList<Address>();
addressCollection.add( addressObject1 );
addressCollection.add( addressObject2 );

Backendless.Data.of( Person.class ).deleteRelation( personObject, "address", addressCollection,
        new AsyncCallback<Integer>()
        {
          @Override
          public void handleResponse( Integer howManyObjDeleted )
          {
            Log.i( "MYAPP", "relation has been deleted");
          }

          @Override
          public void handleFault( BackendlessFault fault )
          {
            Log.e( "MYAPP", "server reported an error - " + fault.getMessage() );
          }
        } );

Codeless Reference

data_delete_object_where_clause

where:

Argument                Description
table name Name of the table where which contains the parent object as identified by parent object.
parent object Id of the object for which the relation will be deleted.
relation name Name of the column which identifies the relation within the parent table (identified as table name).
children Represents a list containing unique identifiers(objectIds) of the children objects relations that must be deleted from the data table.
return result When this box is checked, the operation returns the number of removed child objects relations.

Returns the number of removed child objects relations.

Consider the first object with one-to-many relations(skills column) in the parent data table called employees:
data_delete_object_from_relation_1

By clicking the record (1:N Relations) in the skills column of the parent data table presented above, you get redirected to the child data table called uniqueSkills, where you can see the related children objects:

data_delete_object_from_relation_2

Suppose you want to remove two relations. The following example demonstrates the removal of the Objective-C and Javascript relations from the parent object:

The objectId values for each relation are:

  1. Objective-C: "4E205196-59B0-45A6-BACB-303A66BEFF22"

  2. Javascript: "D08FA6A7-4534-4B43-AF06-BC4CBFE54C60"

data_delete_object_from_relation_3

After the operation runs, the Objective-C and Javascript relations get deleted.

data_delete_object_from_relation_4