我有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()
}
我使用带有条件的“选择内部联接”遵循
@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条记录消息在ID用户= 1的表消息外键中 Result [表格消息] [2]
我的问题是何时调用方法
getAllMessagesByToday
我收到的列表的大小为4,但是第一个元素'UserMessagesView'对象'msg'的大小为4,其他元素对象'msg'的大小为0。
列表中UserMessagesView中的对象User和它们都是相同的所有字段,并且每个ID都不同
跟随图片{{3}}
在这种情况下,我认为Room将返回1条记录,其中包含一个用户对象和4个元素的味精。但这不完全是我的想法。而且我不知道我哪里出了错。 请帮我。我花了三天的时间才能找到答案,但是没有成功。也许房间是新的,没有人遇到像我这样的问题。感谢大家。 对不起,我的英语不好。