Отношения через промежуточный класс с комнатой - PullRequest
0 голосов
/ 16 апреля 2019

Я тестирую 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.

Есть ли способ создать отношение через другой класс или я должен использовать отношение к своей промежуточной таблице, прежде чем достигнуть интересующей таблицы (Автор & Категория)?

...