简体   繁体   中英

How to create a table with a two or more foreign keys using Android Room?

在此处输入图片说明

According theentity-relationship model , the relationship between tbl_post and tbl_category could be specified using Room Persistency Library as follows:

@Entity(foreignKeys = @ForeignKey(
    entity = TblPost.class,
    parentColumns = "id",
    childColumns = "tbl_post_id")
)
class TblPostCategory {
    @PrimaryKey
    public String id;

    @ColumnInfo(name = "user_id")
    public String postId;
}

However TblPostCategory depends on two foreign keys: post_id and category_id from TblPost and TbCategory .

How the relationship should be described using Room annotations?

TblCategory.java

@Entity
class TblCategory {
    @PrimaryKey
    @ColumnInfo(name="cat_id")
    public String id;

    @ColumnInfo(name = "cat_name")
    public String name;
}

TblPost.java (It is missing the foreign key reference but it is not important for the case)

@Entity
class TblPost {
    @PrimaryKey
    @ColumnInfo(name="post_id")
    public String id;

    public String title, content, create_time, author_id;
}

TblPostCategory.java

@Entity(foreignKeys = {
    @ForeignKey(
        entity = TblPost.class,
        parentColumns = "post_id",
        childColumns = "tbl_post_id"
    ),
    @ForeignKey(
        entity = TblCategory.class,
        parentColumns = "cat_id",
        childColumns = "tbl_category_id"
    )
})
class TblPostCategory {
    @PrimaryKey
    @ColumnInfo(name="tbl_post_id")
    public String id;

    @ColumnInfo(name = "tbl_category_id")
    public String categoryId;
}

In Kotlin:

@Entity(
    tableName = "some_table",
    indices = [Index("id"), Index("brand_id"), Index("model_id")],
    foreignKeys = [
        ForeignKey(entity = BrandEntity::class, parentColumns = ["id"],
            childColumns = ["brand_id"]),
        ForeignKey(entity = ModelEntity::class, parentColumns = ["id"],
            childColumns = ["model_id"]),
        ForeignKey(entity = Table1Entity::class, parentColumns = ["id"],
            childColumns = ["table1_id"]),
        ForeignKey(entity = Table2Entity::class, parentColumns = ["id"],
            childColumns = ["table2_id"])
    ]
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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