2017-05-22 6 views
28

私はfoodIdをオートインクリメントにしたいエンティティ(部屋の永続性の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はどのように自動インクリメントフィールドを設定できますか?

あなたが

あなたの主キーのアノテーションは、このようにする必要がありautoGenerateプロパティを使用する必要が

+2

)'あなたが食品クラスの新しいインスタンスを作成する方法ダブル – RobCo

+0

としてそれを宣言します0.0' '使用することができますか?手動でIDを指定するか、空白のままにしますか? – Zookey

答えて

71

@PrimaryKey(autoGenerate = true) 

リファレンスhere

+2

ありがとう、私はautoIncrementを探していた、それはなぜ見つけることができなかったthats。 – chandil03

+0

ちょっと@MatPag私は1つのテーブル(複合プライマリキー)で2つのプライマリキーが必要な場合、プライマリキーの1つは自動インクリメントする必要がありますか?どうすればそれを達成できますか?これに答えることができます[ここ](https://stackoverflow.com/questions/46790830/how-to-make-primary-key-auto-increment-while-using-composite-primary-keys-in-roo)? –

+0

@MatPeg 1つのPrimaryKeyを自分自身で生成したい場合、RESTの@Entity( primaryKeys = arrayOf(COLUMN_ID_LOCAL、COLUMN_ID_REMOTE))から来るものは何ですか? – murt

1

たとえば、あなたがusersエンティティを持っている場合は、保存したいです、フィールドが(firstname, lastname , email)であり、自動生成されたidが必要な場合は、これを行います。

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

ルームは、idフィールドを自動生成し、自動インクリメントされます。

+9

新しいUsersオブジェクトを作成するたびに、idフィールドを渡す必要があります。これは避けられますか? –

+2

はい、 '@PrimaryKey(autoGenerated = true)val id:Long? = null'コンストラクタの外で、クラスの本体にある – Magritte

10

あなたはこのよう@PrimaryKey(autoGenerate = true)を追加することができます。代わりに `0.toDouble(の

@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

'foodId'はnullである必要はありませんが、それは可能です。例えば、デフォルト値を使用することもできます。 'var foodId:Int = 0'となり、自動生成は正しく動作します。 –

関連する問題