【问题标题】:Java android room two foreign keyJava android机房二外键
【发布时间】:2018-12-12 10:08:32
【问题描述】:

我有一个带有两个外键的表进入两个不同的表

这是我的桌子:

@Entity(
        tableName = Constants.TABLE_NAME_PICTURE,
        foreignKeys = {
        @ForeignKey(
                entity = BIN.class,
                parentColumns = "id",
                childColumns = "bin_id"
        ),
        @ForeignKey(
                entity = ORDER.class,
                parentColumns = "id",
                childColumns = "order_id"
        )},
        indices = {@Index("id"), @Index(value = {"bin_id","order_id"})})

public class PICTURE {

    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "id")
    public long id;
    @Attribute(name = "name", required = false)
    @ColumnInfo(name = "name")
    public String name;
    @ColumnInfo(name = "bin_id")
    public int binId;
    @ColumnInfo(name = "order_id")
    public int orderId;

当我将图片插入数据库时​​,我得到:

android.database.sqlite.SQLiteConstraintException: FOREIGN KEY 约束失败(代码 787)

【问题讨论】:

  • 你能把你的两个对象 BIN 和 ORDER 贴出来

标签: java android android-room


【解决方案1】:

我认为你必须改变这行

foreignKeys = {
    @ForeignKey(
            entity = BIN.class,
            parentColumns = {"id"},
            childColumns = {"bin_id"}
    ),
    @ForeignKey(
            entity = ORDER.class,
            parentColumns = {"id"}
            childColumns = {"order_id"}
    )},

【讨论】:

    【解决方案2】:

    试着这样做

    foreignKeys = [
            @ForeignKey(
                    entity = BIN.class,
                    parentColumns = "id",
                    childColumns = "bin_id"
            ),
            @ForeignKey(
                    entity = ORDER.class,
                    parentColumns = "id",
                    childColumns = "order_id"
            )],
    

    其实在kotlin中我是这样写的

    foreignKeys = arrayOf(
                @ForeignKey(
                        entity = BIN.class,
                        parentColumns = "id",
                        childColumns = "bin_id"
                ),
                @ForeignKey(
                        entity = ORDER.class,
                        parentColumns = "id",
                        childColumns = "order_id"
                )]),
    

    可能有帮助

    【讨论】:

    • 好的,但有时我将 0 放入 bin_id 或 order_id 但我在 bin 或 order 行中没有此索引,也许这是一个错误
    • 但图片可以按表格顺序或在表格箱中
    • @jpok 关于foreignKey 可以为空的问题,您可以阅读此answer
    • 所以我有两个创建了另一个表 OrderPicture ?
    • @jpok 如果你关于Nullable 只需将你的int 更改为Integer,但是关于创建表我不明白你的问题
    【解决方案3】:

    您似乎没有添加任何第二行父表,如 BIN.class 和 Order.class。我得到了Here的答复

    【讨论】:

    • 当我删除例如一个伪造密钥时,我添加了一个行 BIN 类和订单类它是工作
    • 但是我有一个问题,我可以为 forgein key 获得 null 吗?有时我要订购图片,但有时要装箱,因为 bin 我过去 0 到 order_id 但我没有这个值来订购类
    • 为了加入多个表,你可能会在右表中得到一些空值(可能是 id)。
    猜你喜欢
    • 2020-08-29
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多