2017-05-22 44 views
28

için ilkel anahtar nasıl yapılır? Girişim (Room Persistence lib) sınıfı Gıda oluşturmaktayım, burada foodId özdevinimli olarak oluşturmak istiyorum.Oda Persistence lib

@Entity 
class Food(var foodName: String, var foodDesc: String, var protein: Double, var carbs: Double, var fat: Double) 
{ 
    @PrimaryKey 
    var foodId: Int = 0 
    var calories: Double = 0.toDouble() 
} 

foodId Bir otomatik erişim alanını nasıl ayarlayabilirim? Eğer bir users varlık varsa saklamak istediğiniz,

@PrimaryKey(autoGenerate = true) 

Referans Örneğin here

+2

'0.toDouble()' kullanabilirsiniz '0.0' Eğer Gıda sınıfının yeni bir örneğini oluşturmak nasıl bir çifte – RobCo

+0

olarak ilan edersiniz? Manuel kimlik belirliyor musunuz yoksa boş bırakıyor musunuz? – Zookey

cevap

71

Böyle olmalı autoGenerate, tesisi

Birincil anahtar ek açıklama kullanmak gerekir alanları (firstname, lastname , email) ile ve otomatik olarak tanımlanmış kimlik istiyorsanız, bunu yaparsınız.

@Entity(tableName = "users") 
data class Users(
    @PrimaryKey(autoGenerated = true) 
    val id: Long, 
    val firstname: String, 
    val lastname: String, 
    val email: String 
) 

Oda sonra autogenerate ve otomatik artış id alan olacak.

+2

Teşekkürler, autoIncrement'ı arıyordum, bu yüzden bulamadık. – chandil03

+0

Hey @MatPag Eğer bir tablonun iki ana anahtarını (Kompozit birincil anahtarları) ve birincil anahtarlardan birini otomatik olarak arttırmalıyım? Bunu nasıl başarabilirim? Buna cevap verebilir misin? (Https://stackoverflow.com/questions/46790830/how-to-make-primary-key-auto-increment-while-using-composite-primary-keys-in-roo)? –

+0

@MatPeg Eğer bir PrimaryKey'e sahip olmak isterim ve REST '@Entity ( primaryKeys = arrayOf (COLUMN_ID_LOCAL, COLUMN_ID_REMOTE))' dan bir tanesine sahip olmak istiyorsam ne olur? – murt

1

:

+9

Her yeni kullanıcı nesnesini oluşturduğumuzda bir kimlik alanını geçmemiz gerekecek. Bu önlenebilir mi? –

+2

Evet, '@PrimaryKey 'i (autoGenerated = true) doğrulayın. = null' kurucunun dışında, – Magritte

10

Böyle @PrimaryKey(autoGenerate = true) ekleyebilirsiniz:

yerine
@Entity 
data class Food(
     var foodName: String, 
     var foodDesc: String, 
     var protein: Double, 
     var carbs: Double, 
     var fat: Double 
){ 
    @PrimaryKey(autoGenerate = true) 
    var foodId: Int? = null // foodId needs to be null otherwise autoGenerate will not work and Room will use the id assigned to it 
    var calories: Double = 0.toDouble() 
} 
+0

sınıfının gövdesinde 'foodId' null olması gerekmiyor (ancak olabilir). Örneğin, varsayılan değerler de kullanılabilir. 'var foodId: Int = 0' ve autogenerate düzgün çalışır. –