# Insert

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

*** ** * ** ***

Common/AllAndroid/JVMNative/C/iOSJavaScript
- Cmn

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

*** ** * ** ***

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

The implementation of the method will insert its parameters into the database.

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

Example:

```kotlin
@Dao
interface MusicDao {
  @Insert(onConflict = OnConflictStrategy.REPLACE)
  fun insertSongs(varargs songs: Song)

  @Insert
  fun insertBoth(song1: Song, song2: Song)

  @Insert
  fun insertAlbumWithSongs(album: Album, songs: List<Song>)
}
```

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

```kotlin
@Entity
data class Playlist (
  @PrimaryKey(autoGenerate = true)
  val playlistId: Long,
  val name: String,
  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 NameAndDescription (
  val name: String,
  val description: String
)

@Dao
interface PlaylistDao {
  @Insert(entity = Playlist::class)
  fun insertNewPlaylist(nameDescription: NameAndDescription)
}
```

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

## Summary

| ### Public constructors |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/room/Insert#Insert(kotlin.reflect.KClass,kotlin.Int)(entity: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<*>, onConflict: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html)` | Cmn |

| ### Public properties |
|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<*>` | `https://developer.android.com/reference/kotlin/androidx/room/Insert#entity()` The target entity of the insert method. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | `https://developer.android.com/reference/kotlin/androidx/room/Insert#onConflict()` What to do if a conflict happens. | Cmn |

## Public constructors

### Insert

Cmn Added in [2.8.5](https://developer.android.com/jetpack/androidx/releases/room#2.8.5)

```
Insert(
    entity: KClass<*> = Any::class,
    onConflict: Int = OnConflictStrategy.ABORT
)
```

## Public properties

### entity

Cmn

```
val entity: KClass<*>
```

The target entity of the insert method.

When this is declared, the insert 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 all of the non-null fields without default values of the target entity.

If the target entity contains a `https://developer.android.com/reference/kotlin/androidx/room/PrimaryKey` that is auto generated, then the POJO class doesn't need an equal primary key field, otherwise primary keys must also be present in the POJO.

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.reflect/-k-class/index.html<*>` | the target entity of the insert method or none if the method should use the parameter type entities. |

### onConflict

Cmn

```
val onConflict: Int
```

What to do if a conflict happens.

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

| Returns |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html` | How to handle conflicts. Defaults to `https://developer.android.com/reference/kotlin/androidx/room/OnConflictStrategy#ABORT()`. |