繁体   English   中英

android 房间数据库架构无效错误导致primaryKeyPosition

[英]android room database schema invalid error caused by primaryKeyPosition

我有一个带有几个表的简单数据库。我已经为表实现了房间实体。我收到这个错误,它说我的架构是无效的。但我发现它非常相似,唯一的区别是列顺序和 primaryKeyPosition。

错误消息(我省略了外键,因为它们相等)

Expected:

TableInfo{name='am',
 columns={name=Column{name='name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'},
 symbol=Column{name='symbol', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'},
 a_number=Column{name='a_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'},
 a_id=Column{name='a_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=0, defaultValue='null'}},


Found:

TableInfo{name='am',
 columns={symbol=Column{name='symbol', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'},
 name=Column{name='name', type='TEXT', affinity='2', notNull=false, primaryKeyPosition=0, defaultValue='null'},
 a_number=Column{name='a_number', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=1, defaultValue='null'},
 a_id=Column{name='a_id', type='INTEGER', affinity='3', notNull=true, primaryKeyPosition=2, defaultValue='null'}},

我附上了一张图片来澄清差异

在此处输入图像描述

如您所见,唯一的区别是*第一个和第二个表列顺序不同*最后一列中的primaryKeyPosition不同

我的实体 class

@Entity(tableName = "am",
        foreignKeys = {
                @ForeignKey(entity = ATypes.class,
                        parentColumns = "a_id",
                        childColumns = "a_id"),
        },
        indices = {@Index("a_id")}
)
public class Am {

    public String name;
    public String symbol;
    @PrimaryKey
    @ColumnInfo(name = "a_number")
    public int aNumber;

    @NonNull
    @ColumnInfo(name = "a_id")
    public Integer aId;

}

我的问题是如何更改列顺序或 primaryKeyPosition 以匹配预期的架构。

您缺少主键的索引!

如果您使用的是 Robolectric,问题可能是由这个问题引起的https://github.com/robolectric/robolectric/issues/4209

我有同样的问题,我用https://github.com/guness/RobolectricSQLite解决了它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM