Запрос к таблице A с внутренним соединением таблицы B не возвращает столбцы из таблицы B в приложении Android с использованием базы данных Room - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь сделать запрос из таблицы posts с внутренним соединением на users и его соответствующим первичным и внешним ключом:

@Query("SELECT p.*, u.id AS userId, u.name AS userName, u.username AS userUsername FROM posts p JOIN users u ON p.userId = u.id")
fun fetchAllPostsAndUsers(): Observable<List<Post>>

Это POJO.Во-первых, User:

@Entity(tableName = "users")
data class User(
    @PrimaryKey(autoGenerate = true)
    @SerializedName("id")
    @ColumnInfo(name = "id")
    val uid: Int,

    val name: String,

    val username: String,

    val email: String,

    @Embedded
    val address: Address?,

    val phone: String,

    val website: String,

    @Embedded
    val company: Company?
)

и Post:

@Entity(
    tableName = "posts",
    foreignKeys = [ForeignKey(
        entity = User::class,
        parentColumns = ["id"],
        childColumns = ["userId"],
        onDelete = ForeignKey.CASCADE
    )]
)
data class Post(
    @PrimaryKey(autoGenerate = true)
    @SerializedName("id")
    @ColumnInfo(name = "id")
    val pid: Int,

    val userId: Int,

    val title: String,

    val body: String
)

Но результатом вышеупомянутого запроса являются только столбцы из таблицы posts без каких-либо столбцовиз users ', несмотря на включение в запрос при извлечении из базы данных.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Решением для этого было добавить поля, соответствующие именам столбцов или псевдонимов из SQL-запроса, а не эти @Embedded s.

0 голосов
/ 16 октября 2018

Полагаю, вам стоит взглянуть на эту ветку .Объект Post не содержит никакого объекта User.Вы должны создать модель, которая содержит оба.

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