如何在并没有主键的情况下创建实体的新实例


抱歉,这是一个愚蠢的问题。我试图熟悉科特林,却遇到了一个问题。我有一个kotlin应用程序,我在其中使用Room存储数据。

这是我的实体类:

@Entity
data class Link(@PrimaryKey(autoGenerate = true) var _id: Int,
@ColumnInfo(name = "link_url") var linkUrl: String?,
@ColumnInfo(name = "timestamp") var timestamp: Long?)

如何在不指定_id的情况下创建Link的新实例?

var link: Link = Link("url", 12334)

提前谢谢!

您可以创建另一个带有@Ignore注释的构造函数,这样Room:就会忽略它

@Ignore
constructor(var linkUrl: String?, timestamp: Long?) : this (null, linkUrl, timestamp)

如果为自动生成的字段传递null,它将自动生成新值。

在kotlin中使用默认值。

@Entity
data class Link(@PrimaryKey(autoGenerate = true) var _id: Int = -1,
@ColumnInfo(name = "link_url") var linkUrl: String?,
@ColumnInfo(name = "timestamp") var timestamp: Long?)

那你必须这样打电话。

var link: Link = Link(linkUrl = "url",timestamp = 12334)

现在,我们需要使用命名参数作为默认参数_id是第一个参数。如果_id是最后一个参数,那么您可以直接调用它。

var link: Link = Link("url", 12334)

注意:如果您希望两个构造函数都在Java中,那么您必须在构造函数上使用@JvmOverloads

@Entity
data class Link @JvmOverloads constructor(
// .....
)

相关内容

  • 没有找到相关文章

最新更新