如何在房间中制作复合键
Posted
技术标签:
【中文标题】如何在房间中制作复合键【英文标题】:How to make composite key in Room 【发布时间】:2018-04-18 05:22:54 【问题描述】:我刚刚在房间里找到了@PrimaryKey 注释。那么如果我想制作复合键,我该怎么做呢?
【问题讨论】:
复合主键与 MVVM 有什么关系? 是的 CommonsWare 这两个都是独立的。感谢您指出,我会修改我的问题。 【参考方案1】:使用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 提供的示例。
【讨论】:
谢谢它成功了,如果有人需要,我在这里分享实现:@Entity (primaryKeys = "column1","column2") 这是创建复合主键的例子吗??【参考方案2】:以下是 Kotlin 的示例:
import android.arch.persistence.room.Entity
@Entity(primaryKeys= [ "first_name", "last_name" ] )
class User
.......
【讨论】:
如何将其中之一设为autogenerate = true
?
@WahibUlHaq ***.com/questions/46790830/… 这可能会回答你的问题
使用 '' 而不是 '['
我认为对于 java 你需要
而对于 kotlin 你需要 [
【参考方案3】:
这对我有用,我认为我使用的是 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
)
【讨论】:
【参考方案4】:您可以在现有实体类之上声明一个实体,例如以下
@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否则会给你一个编译时错误,如谷歌开发者网站上所述。 希望,这会有所帮助。
【讨论】:
以上是关于如何在房间中制作复合键的主要内容,如果未能解决你的问题,请参考以下文章