У меня есть 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 дня, чтобы узнать, но это не сработало. Может быть, номер новый, и ни у кого нет проблем, как у меня. Спасибо всем.
Извините, мой плохой английский.