【发布时间】:2018-04-18 05:22:54
【问题描述】:
我刚刚在房间里找到了@PrimaryKey 注释。那么如果我想制作复合键,我该怎么做呢?
【问题讨论】:
-
复合主键与 MVVM 有什么关系?
-
是的 CommonsWare 这两个都是独立的。感谢您指出,我会修改我的问题。
标签: android android-room
我刚刚在房间里找到了@PrimaryKey 注释。那么如果我想制作复合键,我该怎么做呢?
【问题讨论】:
标签: android android-room
使用primaryKeys()。
Android Developer Documentation 代表Room 状态:
如果在 Embeddedd 字段上使用 PrimaryKey 注释,则所有列 从该嵌入字段继承成为复合主键 (包括它的大子字段)。
Java 中的示例实现:
@Entity(primaryKeys = {"column1","column2","column3"})
public class DummyClass {
...
}
kotlin 中的示例实现:
@Entity(primaryKeys = ["column1","column2","column3"])
class DummyClass {
...
}
感谢Lalit Kushwah 提供的示例。
【讨论】:
以下是 Kotlin 的示例:
import android.arch.persistence.room.Entity
@Entity(primaryKeys= [ "first_name", "last_name" ] )
class User{
.......
}
【讨论】:
autogenerate = true?
{ 而对于 kotlin 你需要 [
这对我有用,我认为我使用的是 Kotlin 1.3。
@Entity(tableName = "location_table", primaryKeys = ["lat", "lon"])
data class MyLocation(
// @PrimaryKey(autoGenerate = true) var id: Long?,
var lat: Double,
var lon: Double,
var dateTime: String,
var weatherDescription: String,
var temperature: Double
)
【讨论】:
您可以在现有实体类之上声明一个实体,例如以下
@Entity
(tableName = "Equipment_History", primaryKeys = {"EquipName","EquipFunctionalLocation"})
public class EquipmentHistory {
@ColumnInfo @NonNull
private String EquipFunctionalLocation;
@ColumnInfo @NonNull
private String EquipName;
//rest of the columns
}
通过这种方式,您可以拥有自己选择的表名,也可以在 room 中声明复合主键,但请确保在 @ColumnInfo 注释旁边添加 @NonNull 注释,否则代码将无法工作,因为 room否则会给你一个编译时错误,如谷歌开发者网站上所述。 希望,这会有所帮助。
【讨论】: