0

我有一个复杂关系的查询。

data class GameWithHouseworkResult(
    @Embedded val game:GameClass,
    @Relation(
            entity = GameHouseworkResult::class,
            parentColumn = "gameId",
            entityColumn = "houseworkId" ,
            associateBy = Junction(value=GameHouseworkResult::class)
    )
    val houseworkAndResult: List<HouseworkAndResult>
)

我有 3 个实体和一个额外的类

    @Entity
    class GameClass(
        @PrimaryKey(autoGenerate = true)
        var gameId: Int = 0,
        val mainPlayer:String,
        var secondPlayer:String=""
    }
    
    @Entity
    data class HouseworkClass(
        @PrimaryKey
        val houseworkId: Int,
        val name:String,
        val score:Int
        ) {
    }
    
    @Entity(primaryKeys = ["gameId", "houseworkId"])
    class GameHouseworkResult(
        var gameId: Long,
        val houseworkId:Long,
        val userToken:String,
        val isDone:Boolean?= null) {
    }

data class HouseworkAndResult(
    @Embedded val gameHouseworkResult:GameHouseworkResult,
    @Relation(
        parentColumn = "houseworkId",
        entityColumn = "houseworkId"
    )
    val housework: HouseworkClass
)

GameHouseworkResult 是一个 binder 类,它包含以下数据 在此处输入图像描述

    @Transaction
    @Query("SELECT * FROM GameClass where gameId=:id")
    suspend fun getGameWithHouseworkResult(id:Long): GameWithHouseworkResult

当我用 发送请求时gameId = 26,我应该得到一个包含五个元素的列表(houseworkAndResult),但我得到一个包含 10 个元素的列表,每个元素都这么说gameId = 26。这很可能是由于相同的 houseworkId,但我不明白我在制定关系时哪里出错了。请帮我!

4

1 回答 1

0

别担心,我已经找到了解决办法。我混淆了@relation 并使用了多对多而不是一对多。正确的代码

data class GameWithHouseworkResult(
    @Embedded val game:GameClass,
    @Relation(
            entity = GameHouseworkResult::class,
            parentColumn = "gameId",
            entityColumn = "gameId"
    )
    val houseworkAndResult: List<HouseworkAndResult>
)
于 2021-02-16T12:14:40.247 回答