### Deleting records with custom primary keys In addition to deleting by the model type (or `Predicates.ALL`), a record with a custom primary key can be deleted the following ways: With a predicate: #### Custom Primary Key ```java Amplify.DataStore.query(Book.class, Where.identifier(Book.class, Where.identifier(Book.class, "12345")), matches -> { if (matches.hasNext()) { Book book = matches.next(); Amplify.DataStore.delete(book, deleted -> Log.i("MyAmplifyApp", "Deleted a book."), failure -> Log.e("MyAmplifyApp", "Delete failed.", failure) ); } }, failure -> Log.e("MyAmplifyApp", "Query failed.", failure)); ``` ```kotlin Amplify.DataStore.query(Book::class.java, Where.identifier(Book::class.java, "12345"), { matches -> if (matches.hasNext()) { val post = matches.next() Amplify.DataStore.delete(post, { Log.i("MyAmplifyApp", "Deleted a book.") }, { Log.e("MyAmplifyApp", "Delete failed.", it) } ) } }, { Log.e("MyAmplifyApp", "Query failed.", it) } ) ``` ```kotlin Amplify.DataStore.query(Book::class, Where.identifier(Book::class.java, "12345")) .catch { Log.e("MyAmplifyApp", "Query failed", it) } .onEach { Amplify.DataStore.delete(it) } .catch { Log.e("MyAmplifyApp", "Delete failed", it) } .collect { Log.i("MyAmplifyApp", "Deleted a book") } ``` ```java RxAmplify.DataStore.query(Book.class, Where.identifier(Book::class.java, "12345")) .flatMapCompletable(RxAmplify.DataStore::delete) .subscribe( () -> Log.i("MyAmplifyApp", "Deleted a book."), failure -> Log.e("MyAmplifyApp", "Delete failed.", failure) ); ``` #### Composite Key ```java Amplify.DataStore.query(Book.class, Where.identifier(Book.class, Where.identifier(Book::class.java, new BookIdentifier( "12345", "My Title")), matches -> { if (matches.hasNext()) { Book book = matches.next(); Amplify.DataStore.delete(book, deleted -> Log.i("MyAmplifyApp", "Deleted a book."), failure -> Log.e("MyAmplifyApp", "Delete failed.", failure) ); } }, failure -> Log.e("MyAmplifyApp", "Query failed.", failure)); ``` ```kotlin Amplify.DataStore.query(Book::class.java, Where.identifier(Book::class.java, BookIdentifier( "12345", "My Title")), { matches -> if (matches.hasNext()) { val post = matches.next() Amplify.DataStore.delete(post, { Log.i("MyAmplifyApp", "Deleted a book.") }, { Log.e("MyAmplifyApp", "Delete failed.", it) } ) } }, { Log.e("MyAmplifyApp", "Query failed.", it) } ) ``` ```kotlin Amplify.DataStore.query(Book::class, Where.identifier(Book::class.java, BookIdentifier( "12345", "My Title"))) .catch { Log.e("MyAmplifyApp", "Query failed", it) } .onEach { Amplify.DataStore.delete(it) } .catch { Log.e("MyAmplifyApp", "Delete failed", it) } .collect { Log.i("MyAmplifyApp", "Deleted a book") } ``` ```java RxAmplify.DataStore.query(Book.class, Where.identifier(Book::class.java, new BookIdentifier( "12345", "My Title"))) .flatMapCompletable(RxAmplify.DataStore::delete) .subscribe( () -> Log.i("MyAmplifyApp", "Deleted a book."), failure -> Log.e("MyAmplifyApp", "Delete failed.", failure) ); ```