Как использовать класс «один ко многим» в соединительной таблице? - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время я работаю над приложением android, использующим room, с китайским словарем, где между символом и его англоязычными * У меня есть класс, который я использую для хранения символа и его списка определений:

data class Word (
    @Embedded val character : Character,
    @Relation(
        parentColumn = "character_id",
        entityColumn = "parent_character_id"
        //,associateBy = Junction(JunctionWordXDefinition::class)
    )
    val definitions : MutableList<Definition>
)

Моя цель - дать пользователю возможность создавать списки этих слов для действия, и поэтому это будет состоять из отношения «многие ко многим» между topi c и словами.

Мой вопрос: поскольку android требует, чтобы классы, используемые в соединении, были либо сущностью, либо представление базы данных, можно ли использовать мой класс «Один ко многим» в таблице сопоставления? Или мне нужно изменить его для использования таблицы соединений?

Это классы, которые я создал, чтобы попытаться реализовать это, но я получаю сообщение об ошибке, в котором говорится, что Word должен быть сущностью или представлением базы данных.

@Entity(tableName = "topics")
data class Topic(
    val title: String = ""
) {
    @ColumnInfo(name = "topic_id")
    var id : Int= 0
}
@Entity(primaryKeys = ["topic_id", "character_id"])
data class JunctionTopicXWord (
    val topicId : Int,
    val characterId : Int
)
data class Lesson(
    @Embedded var topic: Topic,
    @Relation(
        parentColumn = "topic_id",
        entityColumn = "character_id",
        associateBy = Junction(JunctionTopicXWord::class)
    )
    val words : List<Word>
)

1 Ответ

0 голосов
/ 05 августа 2020

В комнате есть вложенные отношения , которые вы можете попробовать использовать, не изменяя свои сущности.

Думаю, это должно быть что-то вроде этого (сущность Word не требует изменений) :

data class Lesson(
    @Embedded var topic: Topic,
    @Relation(
        entity = Character::class,
        parentColumn = "character_id",
        entityColumn = "character_id",
        associateBy = Junction(JunctionTopicXWord::class)
    )
    val words : List<Word>
)
...