【问题标题】:How can I set autoGenerate in the primaryKeys list of @Entity?如何在@Entity 的主键列表中设置自动生成?
【发布时间】:2018-10-19 17:37:52
【问题描述】:

我是 Android Room 库的新手。我想创建一个有两个主键的表。我也想将 autoGenerate 设置为这两个主键,但我不知道该怎么做。详细代码如下:

@Entity(primaryKeys = {"userId", "planName"},
    foreignKeys = @ForeignKey(entity = User.class,
    parentColumns = "id",
    childColumns = "userId",
    onDelete = CASCADE))
public class Plan {

    public int userId;

    @NonNull
    public String planName;
}

非常感谢!

【问题讨论】:

    标签: android database sqlite android-room


    【解决方案1】:

    欢迎来到 Stackoverflow。

    从技术上讲,您不能有 2 个主键。根据定义,它是具有UNIQUE 约束的单个索引。虽然它可以一次应用于 2 列。这意味着这 2 列的组合应该是唯一的,但每一列都可以单独包含重复值。

    对于autoGenerate,主键只有在integer类型和单列的情况下才能自动生成。不能自动生成复合主键。

    【讨论】:

      【解决方案2】:

      通常,主键应该是唯一标识每一行的单个列。如果您还想保证对 (userId, planName) 的唯一性,您应该只添加一个 UNIQUE 约束。此外,您可能希望为这对列添加索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-12
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-06
        • 1970-01-01
        相关资源
        最近更新 更多