Tuesday, 16 February 2021

Roomdb - Update @Embedded object within an Entity

I faced a problem when updating values of @Embedded object within an Entity.

Here is my Entity class:

@Entity
data class ReplyData(
    @PrimaryKey val id: String,
    @ColumnInfo(name = "sequence") val sequence: Int?,
    @Embedded(prefix = "from") val from: From?     <--- I want to update this @Embedded object within entity
)

@Entity
data class From(
    @ColumnInfo(name = "id") val id: String? = "",
    @ColumnInfo(name = "name") val name: String? = "",
    @ColumnInfo(name = "avatar") val avatar: String? = "",
    @ColumnInfo(name = "kind") val kind: String? = ""
)

I want to update these 3 values in 1 shot instead of updating them one-by-one with this query below.

@Query("UPDATE replydata.from SET name = :name, avatar = :avatar, kind = :kind WHERE id = :id")
fun updateReplyData(id: String, name: String, avatar: String, kind: String) 

How can I achieve that without affecting the original entity (ReplyData)?

I tried this solution, but it is not working at all:

@Query("SELECT * FROM message WHERE id = :id")
suspend fun getReplyMessage(id: String): Message

@Update(entity = From::class)
suspend fun updateReply(msg: Message)

suspend fun updatePinMessage(id: String, from: From) {
    val msg = getReplyMessage(id)

    msg.from?.avatar = from.avatar
    msg.from?.name = from.name
    msg.from?.kind= from.kind

    updateReply(msg)
}


from Roomdb - Update @Embedded object within an Entity

No comments:

Post a Comment