Android Room Select @ Отношение Аннотации с условиями Один ко многим Проблема - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть 2 сущности: пользователь и сообщения. Каждый пользователь может иметь несколько сообщений.

Класс пользователя

@Entity(tableName = DBConstants.TABLE_USER)
open class User(
        @field:PrimaryKey(autoGenerate = true)
        var id: Int = 0,
        var appUserId: Int = 0,
        var name: String = "",
        var phoneNumber: String = "",
        var appPackage: @AppPackage String = IN_APP,
        var userType: @UserType Int = CUSTOMER
) : Serializable ,BaseObservable(){
    @field:Ignore
    var messages: ArrayList<Messages> = ArrayList()

    @Bindable
    fun getNumMessages() : Int {
        return messages.size
    }
}

и сообщения класса

@Entity(tableName = TABLE_USER_MESSAGES,
        foreignKeys = [ForeignKey(entity = User::class,
                parentColumns = arrayOf("id"),
                childColumns = arrayOf("userId"),
                onDelete = ForeignKey.CASCADE,
                onUpdate = ForeignKey.CASCADE)])
data class Messages(@field:PrimaryKey(autoGenerate = true) var id: Int = 0,
                    @field:ColumnInfo(name = "userId")
                    var userId: Int = 0,
                    var appUserId: Int = 0,
                    var appPackage: @AppPackage String = IN_APP,
                    var ticker: String = "",
                    var title: String = "",
                    var text: String = "",
                    var date : String)

Для выбора одного пользователя - много сообщений. Я создал класс UserMessagesView.kt

class UserMessagesView {
    @Embedded
    var user : User = User()
    @Relation(parentColumn = "id", entityColumn = "userId",entity = Messages::class)
    var msg: List<Messages> = ArrayList()
}

Я использую Выберите Inner Join с условиями, следуйте этому

@Dao
abstract class UserMessagesDao : BaseDao<Messages>() {
    @Query("SELECT * FROM user INNER JOIN messages ON messages.user_id = user.id WHERE messages.date like '%18-11-2018%'")
    abstract fun getAllMessagesByToday(): List<UserMessagesView>
}

В базе данных у меня 1 пользователь в таблице с id = 1 и 4 записи сообщений в таблицу сообщений внешнего ключа с идентификатором user = 1. Follow 2 image TableUser [Табличные сообщения] [2]

Моя проблема, когда я вызываю метод

getAllMessagesByToday

Я получил список размером size = 4, но первый элемент 'UserMessagesView' объекта 'msg' имеет размер = 4, а объект других элементов 'msg' size = 0. И объект User в UserMessagesView в List Они одинаковы по всему полю и разнице каждого ID Follow Image Результат

В этом случае, я думаю, Room вернет 1 запись, содержащую объект пользователя и сообщение из 4 элементов. Но это не совсем то, что я думал. И я не знаю, где я ошибся. Пожалуйста, помогите мне. Мне потребовалось 3 дня, чтобы узнать, но это не сработало. Может быть, номер новый, и ни у кого нет проблем, как у меня. Спасибо всем. Извините, мой плохой английский.

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