public abstract @interface Entity
implements Annotation


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.


 public class Song {
   private final long id;
   private final String name;
   @ColumnInfo(name = "release_year")
   private final int releaseYear;

   public Song(long id, String name, int releaseYear) {
     this.id = id;
     this.name = name;
     this.releaseYear = releaseYear;

   public int getId() {
     return id;

   public String getName() {
     return name;

   public int getReleaseYear() {
     return releaseYear;


Public methods

ForeignKey[] foreignKeys()

List of ForeignKey constraints on this entity.

String[] ignoredColumns()

The list of column names that should be ignored by Room.

Index[] indices()

List of indices on the table.

boolean inheritSuperIndices()

If set to true, any Index defined in parent classes of this class will be carried over to the current Entity.

String[] primaryKeys()

The list of Primary Key column names.

String tableName()

The table name in the SQLite database.

Inherited methods

Public methods


public ForeignKey[] foreignKeys ()

List of ForeignKey constraints on this entity.