У меня есть две разные сущности. У одной есть две ссылки на другую, и мне нужно получить атрибут ссылки.
my_main_table.primary_type
- это внешний ключ types._id
, а my_main_table.secondary_type
- это внешний ключ types._id
, который может быть нулевым.
Предварительно заполненная база данных, скопированная с использованием библиотеки RoomAsset
, поэтому схема уже выполнена в базе данных. Вот схема базы данных:
Вот моя основная сущность:
@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
через отношение. Но я не могу понять, как. Нужен ли мне другой метод в моем хранилище, чтобы получить значение имени?
Спасибо.