Android Room Select@Relationship注释,条件为一对多问题
我有两个实体:用户和消息。每个用户都可以有一些消息 类用户Android Room Select@Relationship注释,条件为一对多问题,android,android-room,Android,Android Room,我有两个实体:用户和消息。每个用户都可以有一些消息 类用户 @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:
@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
}
}
对于“选择一个用户-多条消息”。我创建了类UserMessagesView.kt
class UserMessagesView {
@Embedded
var user : User = User()
@Relation(parentColumn = "id", entityColumn = "userId",entity = Messages::class)
var msg: List<Messages> = ArrayList()
}
class用户消息视图{
@嵌入
var user:user=user()
@关系(parentColumn=“id”,entityColumn=“userId”,entity=Messages::class)
var msg:List=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>
}
@Dao
抽象类UserMessagesDao:BaseDao(){
@查询(“从messages.user_id=user.id WHERE messages.date上的用户内部联接消息中选择*,如“%18-11-2018%”)
抽象趣味getAllMessagesByToday():列表
}
在数据库中,我有一个id为1的表用户
以及4条记录在id user=1的表messages外键中的消息。跟随2图像
[附表][2]
我的问题是当我调用方法时
getAllMessagesByToday
我收到的列表大小为4,但第一个元素“UserMessagesView”对象“msg”的大小为4,其他元素对象“msg”的大小为0。
和UserMessagesView中的object User在列表中它们是相同的所有字段,每个ID都不同
跟随图像
在本例中,我认为Room将返回1条记录,其中包含一个user对象和一个包含4个元素的msg。但这并不完全是我所想的。我不知道哪里出了问题。 请帮帮我。我花了三天的时间才找到答案,但没有成功。也许房间是新的,没有人会像我一样有问题。谢谢大家。
对不起,我的英语不好 请帮帮我!!!!你找到解决这个问题的办法了吗?有解决这个问题的办法吗?
@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>
}