Oda kalıcılığı kitaplığını kullanarak depoladığınızda uygulamanızın verilerini depolayıp kullanmak için kullandığınız nesneleri seçin. Her varlık, ilişkili Odadaki bir tabloya karşılık gelir temsil eder; bir varlığın her örneği, karşılık gelen tablodur.
Diğer bir deyişle, veritabanınızı tanımlamak için Oda varlıklarını kullanabilirsiniz hem de yazmalısınız.
Bir tüzel kişinin anatomisi
Her Oda varlığını
@Entity
. Oda varlığı şunları içerir:
alanlar dahil olmak üzere, veri tabanında karşılık gelen tabloda yer alan her sütun için
birincil anahtarı oluşturan daha fazla sütun bulunur.
Aşağıdaki kod, User
tablosunu tanımlayan basit bir varlık örneğidir
kimlik, ad ve soyadı sütunlarıyla:
Kotlin
@Entity data class User( @PrimaryKey val id: Int, val firstName: String?, val lastName: String? )
Java
@Entity public class User { @PrimaryKey public int id; public String firstName; public String lastName; }
Oda, varsayılan olarak veritabanı tablosu adı olarak sınıf adını kullanır. URL'nin
tablonun farklı bir ada sahip olmasını istiyorsanız,
tableName
özelliği
@Entity
ek açıklaması. Oda, yine aynı şekilde alan adlarını
varsayılan olarak ayarlanır. Bir sütunun farklı bir ada sahip olmasını istiyorsanız
@ColumnInfo
ek açıklamasını
alanına girip name
Aşağıdaki örnekte bir tablo ve sütunları için özel adlar gösterilmektedir:
Kotlin
@Entity(tableName = "users") data class User ( @PrimaryKey val id: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String? )
Java
@Entity(tableName = "users") public class User { @PrimaryKey public int id; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name") public String lastName; }
Birincil anahtar tanımlayın
Her Oda varlığı bir birincil anahtar tanımlamalıdır
her bir satırı benzersiz şekilde tanımlayan bir anahtar kelime oluşturun. En
Bunun en kolay yolu, aynı sütuna
@PrimaryKey
:
Kotlin
@PrimaryKey val id: Int
Java
@PrimaryKey public int id;
Birleşik birincil anahtar tanımlayın
Bir varlık örneklerinin bir kombinasyon tarafından benzersiz şekilde
birden çok sütun varsa bu sütunları listeleyerek birleşik birincil anahtar tanımlayabilirsiniz.
primaryKeys
özelliği:
@Entity
:
Kotlin
@Entity(primaryKeys = ["firstName", "lastName"]) data class User( val firstName: String?, val lastName: String? )
Java
@Entity(primaryKeys = {"firstName", "lastName"}) public class User { public String firstName; public String lastName; }
Alanları yoksay
Oda, varsayılan olarak varlıkta tanımlanan her alan için bir sütun oluşturur.
Bir varlıkta tutmak istemediğiniz alanlar varsa bunlara not ekleyebilirsiniz
@Ignore
kullanılıyor.
aşağıdaki kod snippet'inde gösterilmektedir:
Kotlin
@Entity data class User( @PrimaryKey val id: Int, val firstName: String?, val lastName: String?, @Ignore val picture: Bitmap? )
Java
@Entity public class User { @PrimaryKey public int id; public String firstName; public String lastName; @Ignore Bitmap picture; }
Bir varlığın, alanları bir üst varlıktan devraldığı durumlarda genellikle
kullanımı daha kolay
ignoredColumns
özelliği
@Entity
özelliği:
Kotlin
open class User { var picture: Bitmap? = null } @Entity(ignoredColumns = ["picture"]) data class RemoteUser( @PrimaryKey val id: Int, val hasVpn: Boolean ) : User()
Java
@Entity(ignoredColumns = "picture") public class RemoteUser extends User { @PrimaryKey public int id; public boolean hasVpn; }
Tablo arama desteği sağlama
Oda, aramanızı kolaylaştıran çeşitli ek açıklama türlerini destekler
inceleyebilirsiniz. Uygulamanız için geçerli olmayan
minSdkVersion
16'dan küçük.
Tam metin araması desteği
Uygulamanız tam metin üzerinden veritabanı bilgilerine çok hızlı erişim gerektiriyorsa
API'lerden birini kullanan sanal bir tabloyla desteklense de
FTS3 veya FTS4 SQLite uzantısı
modülünü inceleyin. Bu özelliği kullanmak için
varsa,
@Fts3
veya
Belirli bir öğeye gösterilen @Fts4
ek açıklaması
aşağıdaki kod snippet'inde:
Kotlin
// Use `@Fts3` only if your app has strict disk space requirements or if you // require compatibility with an older SQLite version. @Fts4 @Entity(tableName = "users") data class User( /* Specifying a primary key for an FTS-table-backed entity is optional, but if you include one, it must use this type and column name. */ @PrimaryKey @ColumnInfo(name = "rowid") val id: Int, @ColumnInfo(name = "first_name") val firstName: String? )
Java
// Use `@Fts3` only if your app has strict disk space requirements or if you // require compatibility with an older SQLite version. @Fts4 @Entity(tableName = "users") public class User { // Specifying a primary key for an FTS-table-backed entity is optional, but // if you include one, it must use this type and column name. @PrimaryKey @ColumnInfo(name = "rowid") public int id; @ColumnInfo(name = "first_name") public String firstName; }
Bir tablonun birden fazla dildeki içeriği desteklediği durumlarda
Dil bilgilerinin depolandığı sütunu belirtmek için languageId
seçeneği
her satır:
Kotlin
@Fts4(languageId = "lid") @Entity(tableName = "users") data class User( // ... @ColumnInfo(name = "lid") val languageId: Int )
Java
@Fts4(languageId = "lid") @Entity(tableName = "users") public class User { // ... @ColumnInfo(name = "lid") int languageId; }
Oda, FTS destekli varlıkları tanımlamak için aşağıdakiler gibi çeşitli seçenekler sunar:
ve harici içerik olarak yönetilen tablolar hakkında
bilgi edinebilirsiniz. Örneğin,
daha fazla ayrıntı için
FtsOptions
referansı.
Dizine özel sütunları
Uygulamanızın, FTS3 veya
FTS4 tablo tabanlı varlıklarda, veritabanındaki belirli sütunları dizine eklemeye devam edebilirsiniz
kullanabilirsiniz. Bir varlığa dizin eklemek için
indices
veya izin verilen
@Entity
ek açıklaması,
sütun adlarını listeleyerek veya
bileşik dizin. Aşağıdaki kod snippet'inde bu ek açıklama gösterilmektedir
işlem:
Kotlin
@Entity(indices = [Index(value = ["last_name", "address"])]) data class User( @PrimaryKey val id: Int, val firstName: String?, val address: String?, @ColumnInfo(name = "last_name") val lastName: String?, @Ignore val picture: Bitmap? )
Java
@Entity(indices = {@Index("name"), @Index(value = {"last_name", "address"})}) public class User { @PrimaryKey public int id; public String firstName; public String address; @ColumnInfo(name = "last_name") public String lastName; @Ignore Bitmap picture; }
Bazı durumlarda, bir veritabanındaki belirli alanların veya alan gruplarının benzersiz olması gerekir.
Bu benzersizlik özelliğini,
unique
@Index
mülkü
ek açıklama true
öğesine eklendi. Aşağıdaki kod örneği, bir tabloda
firstName
ve için aynı değer grubunu içeren iki satır
lastName
sütun:
Kotlin
@Entity(indices = [Index(value = ["first_name", "last_name"], unique = true)]) data class User( @PrimaryKey val id: Int, @ColumnInfo(name = "first_name") val firstName: String?, @ColumnInfo(name = "last_name") val lastName: String?, @Ignore var picture: Bitmap? )
Java
@Entity(indices = {@Index(value = {"first_name", "last_name"}, unique = true)}) public class User { @PrimaryKey public int id; @ColumnInfo(name = "first_name") public String firstName; @ColumnInfo(name = "last_name") public String lastName; @Ignore Bitmap picture; }
AutoValue'ya dayalı nesneleri dahil et
Oda 2.1.0 ve daha yüksek bir sürümde, Java tabanlı değişmez değer kullanabilirsiniz
sınıflar,
@AutoValue
kullanarak açıklama eklersiniz. Bu
bir varlığın iki örneği değerlendirildiğinde özellikle
değerine eşit olmalıdır.
@AutoValue
ek açıklamalı sınıfları varlık olarak kullandığınızda
@PrimaryKey
, @ColumnInfo
, @Embedded
ve etiketleri kullanan sınıfının soyut yöntemlerini
@Relation
. Ancak bu ek açıklamaları kullanırken
Odanın yöntemleri yorumlayabilmesi için her seferinde @CopyAnnotations
ek açıklaması
doğru şekilde otomatik olarak
oluşturduğunu gösterin.
Aşağıdaki kod snippet'inde
Odanın varlık olarak tanıdığı @AutoValue
:
@AutoValue @Entity public abstract class User { // Supported annotations must include `@CopyAnnotations`. @CopyAnnotations @PrimaryKey public abstract long getId(); public abstract String getFirstName(); public abstract String getLastName(); // Room uses this factory method to create User objects. public static User create(long id, String firstName, String lastName) { return new AutoValue_User(id, firstName, lastName); } }