Я хочу спросить у вас совета, как я могу получить доступ к объекту после использования LEFT JOIN
на двух таблицах. У меня есть таблицы, определенные во внешнем файле File.db, и я загружаю их в базу данных Room на Android. У меня определены две таблицы:
CREATE TABLE Example (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`name` TEXT NOT NULL,
`description` TEXT,
`source_url` TEXT
);
CREATE TABLE Example_dates (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`example_id` INTEGER NOT NULL,
`color` INTEGER NOT NULL,
`date_from` TEXT,
`date_to` TEXT,
FOREIGN KEY(`example_id`) REFERENCES `Example`(`id`)
);
Мои сущности:
@Entity(
tableName = "Example"
)
data class Example constructor(
@PrimaryKey @ColumnInfo(name = "id") var id: Int,
@ColumnInfo(name = "name") var name: String,
@ColumnInfo(name = "description") var description: String?,
@ColumnInfo(name = "source_url") var sourceUrl: String?
)
@Entity(
tableName = "Example_dates",
foreignKeys = arrayOf(
ForeignKey(entity = Example::class, parentColumns = ["id"],
childColumns = ["example_id"]))
)
data class Example_dates constructor(
@PrimaryKey @ColumnInfo(name = "id") var id: Int,
@ColumnInfo(name = "example_id") var exampleId: Int,
@ColumnInfo(name = "color") var color: Int,
@ColumnInfo(name = "date_from") var dateFrom: String?,
@ColumnInfo(name = "date_to") var dateTo: String?
)
Дао объект:
@Dao
interface AnimalDao {
@Query(
"SELECT * FROM example_dates LEFT JOIN example ON example_dates.example_id = example.id")
fun loadAll(): Cursor
}
И я строю БД следующим образом:
RoomAsset
.databaseBuilder(context, AppDatabase::class.java, "File.db")
.build()
Есть ли способ, как получить объединенные данные из оператора SQL иначе, чем Cursor? Я пытался добавить дополнительные поля в конструктор data class Example
с аннотацией @Ignore
, но получил ошибку с различиями в таблице - "Ожидается / Найден". Или решение на основе курсора - верный способ реализации?
Спасибо.