package androidx.room
/**
* Marks a class as an entity. This class will have a mapping SQLite table in the database.
*
*
* Each entity must have at least 1 field annotated with [PrimaryKey].
* You can also use [.primaryKeys] attribute to define the primary key.
*
*
* Each entity must either have a no-arg constructor or a constructor whose parameters match
* fields (based on type and name). Constructor does not have to receive all fields as parameters
* but if a field is not passed into the constructor, it should either be public or have a public
* setter. If a matching constructor is available, Room will always use it. If you don't want it
* to use a constructor, you can annotate it with [Ignore].
*
*
* When a class is marked as an Entity, all of its fields are persisted. If you would like to
* exclude some of its fields, you can mark them with [Ignore].
*
*
* If a field is `transient`, it is automatically ignored **unless** it is annotated with
* [ColumnInfo], [Embedded] or [Relation].
*
*
* Example:
*
* @Entity
* public class User {
* @PrimaryKey
* private final int uid;
* private String name;
* @ColumnInfo(name = "last_name")
* private String lastName;
*
* public User(int uid) {
* this.uid = uid;
* }
* public String getLastName() {
* return lastName;
* }
* public void setLastName(String lastName) {
* this.lastName = lastName;
* }
* }
*
*
* @see Dao
*
* @see Database
*
* @see PrimaryKey
*
* @see ColumnInfo
*
* @see Index
*/
@Target(AnnotationTarget.CLASS, AnnotationTarget.FILE)
@Retention(AnnotationRetention.BINARY)
annotation class Entity(
/**
* The table name in the SQLite database. If not set, defaults to the class name.
*
* @return The SQLite tableName of the Entity.
*/
val tableName: String = "",
/**
* List of indices on the table.
*
* @return The list of indices on the table.
*/
val indices: Array = [],
/**
* If set to `true`, any Index defined in parent classes of this class will be carried
* over to the current `Entity`. Note that if you set this to `true`, even if the
* `Entity` has a parent which sets this value to `false`, the `Entity` will
* still inherit indices from it and its parents.
*
*
* When the `Entity` inherits an index from the parent, it is **always** renamed with
* the default naming schema since SQLite **does not** allow using the same index name in
* multiple tables. See [Index] for the details of the default name.
*
*
* By default, indices defined in parent classes are dropped to avoid unexpected indices.
* When this happens, you will receive a [RoomWarnings.INDEX_FROM_PARENT_FIELD_IS_DROPPED]
* or [RoomWarnings.INDEX_FROM_PARENT_IS_DROPPED] warning during compilation.
*
* @return True if indices from parent classes should be automatically inherited by this Entity,
* false otherwise. Defaults to false.
*/
val inheritSuperIndices: Boolean = false,
/**
* The list of Primary Key column names.
*
*
* If you would like to define an auto generated primary key, you can use [PrimaryKey]
* annotation on the field with [PrimaryKey.autoGenerate] set to `true`.
*
* @return The primary key of this Entity. Can be empty if the class has a field annotated
* with [PrimaryKey].
*/
val primaryKeys: Array = arrayOf(),
/**
* List of [ForeignKey] constraints on this entity.
*
* @return The list of [ForeignKey] constraints on this entity.
*/
val foreignKeys: Array = arrayOf(),
/**
* The list of column names that should be ignored by Room.
*
*
* Normally, you can use [Ignore], but this is useful for ignoring fields inherited from
* parents.
*
*
* Columns that are part of an [Embedded] field can not be individually ignored. To ignore
* columns from an inherited [Embedded] field, use the name of the field.
*
* @return The list of field names.
*/
val ignoredColumns: Array = arrayOf())