Получить столбец от другого объекта, используя внешние ключи в комнате - PullRequest
0 голосов
/ 23 марта 2019

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

my_main_table.primary_type - это внешний ключ types._id, а my_main_table.secondary_type - это внешний ключ types._id, который может быть нулевым.

Предварительно заполненная база данных, скопированная с использованием библиотеки RoomAsset, поэтому схема уже выполнена в базе данных. Вот схема базы данных:

database diagram

Вот моя основная сущность:

@Entity(
    tableName = "my_main_table",
    foreignKeys = [
        ForeignKey(
            entity = Type::class,
            parentColumns = ["_id"],
            childColumns = ["secondary_type"],
            onDelete = ForeignKey.RESTRICT,
            onUpdate = ForeignKey.RESTRICT
        ),
        ForeignKey(
            entity = Type::class,
            parentColumns = ["_id"],
            childColumns = ["primary_type"],
            onDelete = ForeignKey.RESTRICT,
            onUpdate = ForeignKey.RESTRICT
        )
    ]
)
data class MainTable(
    @PrimaryKey
    @ColumnInfo(name = "_id", index = true)
    val id: Int,

    @ColumnInfo(name = "number")
    val number: String,

    @ColumnInfo(name = "name")
    val name: String,

    @ColumnInfo(name = "primary_type")
    val primaryType: String,

    @ColumnInfo(name = "secondary_type")
    val secondaryType: String?
)

А вот моя ссылка:

@Entity(tableName = "types")
data class Type(
    @PrimaryKey
    @ColumnInfo(name = "_id")
    val id: Int,

    @ColumnInfo(name = "name")
    val name: String
)

Наконец, код SQL для @Query:

SELECT p._id AS _id,
    p.number AS number,
    p.name   AS name,
    pt.name  AS primary_type,
    st.name  AS secondary_type
FROM my_main_table p
    INNER JOIN types pt ON p.primary_type == pt._id
    LEFT JOIN types st ON p.secondary_type == st._id

Я хочу получить значение types.name через отношение. Но я не могу понять, как. Нужен ли мне другой метод в моем хранилище, чтобы получить значение имени?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...