# Update

Artifact: [androidx.room:room-common](https://developer.android.com/jetpack/androidx/releases/room) [View Source](https://cs.android.com/search?q=file:androidx/room/Update.kt+class:androidx.room.Update) Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

*** ** * ** ***


```
@Target(allowedTargets = [AnnotationTarget.FUNCTION])
@Retention(value = AnnotationRetention.BINARY)
public annotation Update
```

<br />

*** ** * ** ***

Marks a method in a `https://developer.android.com/reference/androidx/room/Dao` annotated class as an update method.

The implementation of the method will update its parameters in the database if they already exists (checked by primary keys). If they don't already exists, this option will not change the database.

All of the parameters of the Update method must either be classes annotated with `https://developer.android.com/reference/androidx/room/Entity` or collections/array of it.

Example:

```
@Dao
public interface MusicDao {
    @Update
    fun updateSong(song: Song)

    @Update
    fun updateSongs(songs: List<Song>): Int
}
```

If the target entity is specified via `https://developer.android.com/reference/androidx/room/Update#entity()` then the parameters can be of arbitrary POJO types that will be interpreted as partial entities. For example:

```
@Entity
data class Playlist (
    @PrimaryKey(autoGenerate = true)
    val playlistId: Long,
    val name: String,
    @ColumnInfo(defaultValue = "")
    val description: String,
    @ColumnInfo(defaultValue = "normal")
    val category: String,
    @ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
    val createdTime: String,
    @ColumnInfo(defaultValue = "CURRENT_TIMESTAMP")
    val lastModifiedTime: String
)

data class PlaylistCategory (
  val playlistId: Long,
  val category: String,
  val lastModifiedTime: String
)

@Dao
public interface PlaylistDao {
  @Update(entity = Playlist::class)
  fun updateCategory(varargs category: Category)
}
```

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/room/Insert` |   |
| `https://developer.android.com/reference/androidx/room/Delete` |   |

## Summary

| ### Public methods |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` | `https://developer.android.com/reference/androidx/room/Update#getEntity()()` The target entity of the update method. |
| `final int` | `@https://developer.android.com/reference/androidx/room/OnConflictStrategy https://developer.android.com/reference/androidx/room/Update#getOnConflict()()` What to do if a conflict happens. |

## Public methods

### getEntity

```
public final @NonNull KClass<@NonNull ?> getEntity()
```

The target entity of the update method.

When this is declared, the update method parameters are interpreted as partial entities when the type of the parameter differs from the target. The POJO class that represents the entity must contain a subset of the fields of the target entity along with its primary keys.

Only the columns represented by the partial entity fields will be updated if an entity with equal primary key is found.

By default the target entity is interpreted by the method parameters.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<@https://developer.android.com/reference/androidx/annotation/NonNull ?>` | the target entity of the update method or none if the method should use the parameter type entities. |

### getOnConflict

```
@OnConflictStrategy
public final int getOnConflict()
```

What to do if a conflict happens.

Use `https://developer.android.com/reference/androidx/room/OnConflictStrategy#ABORT()` (default) to roll back the transaction on conflict. Use `https://developer.android.com/reference/androidx/room/OnConflictStrategy#REPLACE()` to replace the existing rows with the new rows. Use `https://developer.android.com/reference/androidx/room/OnConflictStrategy#IGNORE()` to keep the existing rows.

Value is one of the following:

- `0`
- `1`
- `2`
- `3`
- `4`
- `5`

<br />

| Returns |
|---|---|
| `int` | How to handle conflicts. Defaults to `https://developer.android.com/reference/androidx/room/OnConflictStrategy#ABORT()`. |