使用关系和连接时,Android Room[SQLITE_ERROR]SQL错误或缺少数据库

使用关系和连接时,Android Room[SQLITE_ERROR]SQL错误或缺少数据库,android,kotlin,android-room,Android,Kotlin,Android Room,这是我的第一个问题 我正在使用Room数据库构建一个应用程序,我尝试了以下教程,因为我需要实现多对多关系 但是,在我尝试构建应用程序时,我不断收到以下错误: 错误:查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的表:OwnerDogCrossRef) private final java.util.List dogs=null 我的实体,具有交叉引用数据类: @Entity(tableName = "owner_table") data class Owner(

这是我的第一个问题

我正在使用Room数据库构建一个应用程序,我尝试了以下教程,因为我需要实现多对多关系

但是,在我尝试构建应用程序时,我不断收到以下错误:

错误:查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的表:OwnerDogCrossRef) private final java.util.List dogs=null

我的实体,具有交叉引用数据类:

@Entity(tableName = "owner_table")
data class Owner(
    @ColumnInfo(name = "owner_id")
    val id: String,

    @PrimaryKey
    @ColumnInfo(name = "owner_name", index = true)
    val name: String,
    // some other columns

@Entity(tableName = "dog_table")
data class Dog(
    @PrimaryKey
    @ColumnInfo(name = "dog_name")
    val name: String
    // some other columns

@Entity(primaryKeys = ["owner_name", "dog_name"])//, "move_learned_by"])
data class OwnerDogCrossRef(
    val owner_name: String,
    @ColumnInfo(index = true)
    val dog_name: String
    // some other columns
data class OwnerWithDogs(
    @Embedded val owner: Owner,

    @Relation(
        parentColumn = "owner_name",
        entityColumn = "dog_name",
        associateBy = Junction(OwnerDogCrossRef::class)
    )
    val dogs: List<Dog>
)
我的连接数据类:

@Entity(tableName = "owner_table")
data class Owner(
    @ColumnInfo(name = "owner_id")
    val id: String,

    @PrimaryKey
    @ColumnInfo(name = "owner_name", index = true)
    val name: String,
    // some other columns

@Entity(tableName = "dog_table")
data class Dog(
    @PrimaryKey
    @ColumnInfo(name = "dog_name")
    val name: String
    // some other columns

@Entity(primaryKeys = ["owner_name", "dog_name"])//, "move_learned_by"])
data class OwnerDogCrossRef(
    val owner_name: String,
    @ColumnInfo(index = true)
    val dog_name: String
    // some other columns
data class OwnerWithDogs(
    @Embedded val owner: Owner,

    @Relation(
        parentColumn = "owner_name",
        entityColumn = "dog_name",
        associateBy = Junction(OwnerDogCrossRef::class)
    )
    val dogs: List<Dog>
)
感谢您的帮助

数据类所有者和狗(
data class OwnerWithDogs(
    @Embedded val owner: Owner,

    @Relation(
        parentColumn = "owner_name",
        entity = Dog.class,
        entityColumn = "dog_name",
        associateBy = @Junction(
        value=OwnerDogCrossRef.class,
        parentColumn = "owner_name",//variable name in your OwnerDogCrossRef
        entityColumn = "dog_name")
    )
    val dogs: List<Dog>
)
@嵌入val所有者:所有者, @关系( parentColumn=“所有者名称”, 实体=Dog.class, entityColumn=“dog\u name”, associateBy=@Junction( 值=OwnerDogCrossRef.class, parentColumn=“owner\u name”,//OwnerDogCrossRef中的变量名 entityColumn=“狗名”) ) 瓦尔狗:名单 )
试试这个代码。 如需进一步了解,请尝试此链接

数据类所有者和狗(
@嵌入val所有者:所有者,
@关系(
parentColumn=“所有者名称”,
实体=Dog.class,
entityColumn=“dog\u name”,
associateBy=@Junction(
值=OwnerDogCrossRef.class,
parentColumn=“owner\u name”,//OwnerDogCrossRef中的变量名
entityColumn=“狗名”)
)
瓦尔狗:名单
)
试试这个代码。 如需进一步了解,请尝试此链接

转到您的数据库.kt文件,确保交叉引用表已包含在实体列表中。你的可能与下面的例子不同,但我希望你能看到你可能遗漏了什么

@Database(entities = [Owner::class, Dog::class, OwnerDogCrossRef::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

...

}

这是因为Owner、Dog和OwnerDogCrossRef都是数据库需要了解的表,而OwnerWithDogs只是将相关表加入到事务中,因为将根据运行多个查询。另请参见显示如何包含特定数据库的实体的数据库文档。

转到您的数据库.kt文件,确保交叉引用表已包含在实体列表中。你的可能与下面的例子不同,但我希望你能看到你可能遗漏了什么

@Database(entities = [Owner::class, Dog::class, OwnerDogCrossRef::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

...

}

这是因为Owner、Dog和OwnerDogCrossRef都是数据库需要了解的表,而OwnerWithDogs只是将相关表加入到事务中,因为将根据运行多个查询。另请参见数据库文档,其中显示了如何包含特定数据库的实体。

我刚刚尝试了您的方法,但它给了我相同的错误我刚刚尝试了您的方法,但它给了我相同的错误