Номер SELECT для "много ко многим" - PullRequest
0 голосов
/ 07 июня 2019

Предположим, у меня есть следующие объекты:

Сущность A:

@Entity(
    tableName = "a_table"
)
data class A(
    val name: String
) {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "a_id")
    var id: Long = 0
}

И Сущность B:

@Entity(
    tableName = "b_table"
)
data class B(
    val type: String
) {
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(name = "b_id")
    var id: Long = 0
}

Сущность B заполнена разными типами. A Сущности могут иметь ссылку на B Сущности (отношение "M: N"). Итак, добавил объект Entity:

@Entity(
    tableName = "a_b_join",
    primaryKeys = ["fk_a_id", "fk_b_id"],
    foreignKeys = [
        ForeignKey(
            childColumns = arrayOf("fk_a_id"),
            entity = A::class,
            parentColumns = arrayOf("a_id")
        ), ForeignKey(
            childColumns = arrayOf("fk_b_id"),
            entity = B::class,
            parentColumns = arrayOf("b_id")
        )
    ]
)
class ABJoin(
    @ColumnInfo(name = "fk_a_id") var fkAId: Long = 0,
    @ColumnInfo(name = "fk_b_id") var fkBId: Long = 0
)

В конце я хочу POJO, которое выглядит так:

class AwithBPojo {
    @Embedded
    lateinit var a : A

    @???
    val listOfB : List<B> = arrayListOf()
}

Почему это так сложно для такой простой работы? Или я что-то не так делаю? Я просто хочу получить список всех A объектов с указанными B объектами.

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

class AwithBPojo {
    @Embedded
    lateinit var a : A

    @Relation(
        parentColumn = "b_id",
        projection = ["fk_b_id"],
        entityColumn = "fk_b_id",
        entity = ABJoin::class
    )
    val listOfB : List<Long> = arrayListOf()
}

Но я не хочу иметь только идентификаторы сущности B, потому что потом сложно объединять LiveData.

...