Android Room Select @Relation Annotation带条件一对多问题

时间:2018-11-18 01:58:16

标签: android android-room

我有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个元素的味精。但这不完全是我的想法。而且我不知道我哪里出了错。 请帮我。我花了三天的时间才能找到答案,但是没有成功。也许房间是新的,没有人遇到像我这样的问题。感谢大家。 对不起,我的英语不好。

0 个答案:

没有答案