Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 房间。错误:多个字段具有相同的列名称_Android_Foreign Keys_Android Room - Fatal编程技术网

Android 房间。错误:多个字段具有相同的列名称

Android 房间。错误:多个字段具有相同的列名称,android,foreign-keys,android-room,Android,Foreign Keys,Android Room,我试图在其中一个表引用另一个表两次的表之间创建关系。代码如下: @Entity(tableName = "message", foreignKeys = [ ForeignKey(entity = Contact::class, parentColumns = ["id"], childColumns = ["toContactId"],

我试图在其中一个表引用另一个表两次的表之间创建关系。代码如下:

@Entity(tableName = "message",
        foreignKeys = [
            ForeignKey(entity = Contact::class,
                    parentColumns = ["id"],
                    childColumns = ["toContactId"],
                    onDelete = NO_ACTION
            ),
            ForeignKey(entity = Contact::class,
                    parentColumns = ["id"],
                    childColumns = ["fromContactId"],
                    onDelete = NO_ACTION)
        ], indices = [Index("toContactId"), Index("fromContactId")]
)
data class Message(
        @PrimaryKey var id: String,
        var creationDate: Date,
        var messageStatus: MessageStatus,
        var toContactId: String,
        var fromContactId: String,
        var text: String
)


@Entity(tableName = "contact")
data class Contact(
        @PrimaryKey val id: String,
        val firstName: String,
        val lastName: String,
        val cellPhone: String,
        val email: String
)
下面是我如何创建“关系”类的:

这种方法的结果是 错误:多个字段具有相同的列名称:id。字段名称:message>id,toContact>id,fromContact>id。

我还尝试为注释@Embedded(prefix=“to”@Embedded(prefix=“from”)添加前缀。但在这种情况下,Room无法在查询返回的文件和MessageRelations类中的文件之间找到匹配项

如果有任何关于如何解决此问题的提示,我将不胜感激。

我相信使用而不是@Embed将解决这些问题,因为它不会包含它根据关系构建对象的实体中的字段/变量

所以你会有这样的想法:-

data class MessageRelations(@Embedded var message: Message,
                                @Relation(parentColumn = "toContactId", entityColumn = "id") var toContact: Contact,
                                @Relation(parentColumn = "fromContactId", entityColumn = "id") var fromContact: Contact)
  • 注意:以上为原则性代码,未经测试或运行

在使用@Relation时,我是否仍应在消息实体中指定ForeignKey?@OlehLiskovych yes(尽管不需要指定外键,因为外键主要定义插入/更新/删除规则,而需要建立关系)。也许你可以看看真棒。只需将“albumId”更改为“id”。谢谢你的回答和进一步的解释@OlehLiskovych ooops认为我已经改变了这一点(将相应地编辑答案)。
data class MessageRelations(@Embedded var message: Message,
                                @Relation(parentColumn = "toContactId", entityColumn = "id") var toContact: Contact,
                                @Relation(parentColumn = "fromContactId", entityColumn = "id") var fromContact: Contact)