Я тестирую Room через приложение, обрабатывающее книги и авторов.
Я создал модель, состоящую из 3 стандартных сущностей (Книга, Автор, Категория) и двух взаимосвязанных сущностей (CategoryForBook, AuthorOfBook), описанных ниже
@Entity(tableName = "books")
data class Book(
@PrimaryKey @ColumnInfo val id: Int,
@ColumnInfo val title: String,
@ColumnInfo val publicationYear: Int? = null,
@ColumnInfo val publisher: String? = null,
@ColumnInfo val coverUrl: String? = null
)
@Entity(tableName = "authors")
data class Author(
@PrimaryKey @ColumnInfo val id: Int,
@ColumnInfo val firstName: String,
@ColumnInfo val lastName: Int?,
@ColumnInfo val birthDate: Date?,
@ColumnInfo val nationality: String?,
@ColumnInfo val biography: String?,
@ColumnInfo val pictureUrl: String?
)
@Entity(tableName = "categories")
data class Category(
@PrimaryKey @ColumnInfo val id: Int,
@ColumnInfo val name: String
)
@Entity(
tableName = "author_of_book", primaryKeys = ["authorId", "bookId"], foreignKeys = [
ForeignKey(entity = Author::class, parentColumns = arrayOf("id"), childColumns = arrayOf("authorId")),
ForeignKey(entity = Book::class, parentColumns = arrayOf("id"), childColumns = arrayOf("bookId"))
]
)
data class AuthorOfBook(
@ColumnInfo val authorId: Int,
@ColumnInfo val bookId: Int
)
@Entity(
tableName = "categories_for_books", primaryKeys = ["categoryId", "bookId"], foreignKeys = [
ForeignKey(entity = Category::class, parentColumns = arrayOf("id"), childColumns = arrayOf("categoryId")),
ForeignKey(entity = Book::class, parentColumns = arrayOf("id"), childColumns = arrayOf("bookId"))
]
)
data class CategoryForBook(
@ColumnInfo val categoryId: Int,
@ColumnInfo val bookId: Int
)
Поскольку книга может быть написана несколькимиАвторы и имеют несколько категорий, мне нужно отношение многие-ко-многим, следовательно, сущности отношения.
Теперь я хотел бы получить всю информацию о книге, но поскольку есть эта промежуточная таблица (CategoryForBook &AuthorOfBook), я не знаю, как написать свой класс FullBookInfo.
Есть ли способ создать отношение через другой класс или я должен использовать отношение к своей промежуточной таблице, прежде чем достигнуть интересующей таблицы (Автор & Категория)?