如何在实体领域 class Room kotlin 中的 parcelabel 对象的可变列表中创建一个 aotuGenerated 字段

how to make an aotuGenerated field in a mutableList of parcelabel object in a feild of entity class Room kotlin

我有一个实体 class (PipeLine),它有一个可变的 parcelabel class (DamagePoint) 列表 主 class PipeLine 有一个字段 val id:Int=0, primary key 设置为 autoGerat=true 它工作正常

subclass DamagePoint 也有一个主键val no:Int=1, 我用它来做点序列它不工作!! 生成的所有点都有 no=0

澄清一下,每个 PipeLine 都有一个 DamagePoints 列表,按数字排序

我该怎么做!!

classPipeLine.kt

@Parcelize
@Entity(tableName = "table_Lines")
data class PipeLine(
    @PrimaryKey(autoGenerate = true)
    val id:Int=0,
    var name: String?,
    var ogm: String?,
    var length: String?,
    var type: String?,
    var i_start: String?,
    var i_end: String?,
    var start_point: String?,
    var end_point: String?,
    var work_date:String?,
    var points: MutableList<DamagePoint>
):Parcelable


@Parcelize
data class DamagePoint(
    @PrimaryKey(autoGenerate = true)
    val no:Int=1,
    var db: String? = null,
    var depth: String? = null,
    var current1: String? = null,
    var current2: String? = null,
    var gps_x: String? = null,
    var gps_y: String? = null
):Parcelable

class DataConverter {
    @TypeConverter
    fun fromPoints(points: MutableList<DamagePoint>?): String? {
        if (points == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
        return gson.toJson(points, type)
    }

    @TypeConverter
    fun toPoints(points: String?): MutableList<DamagePoint>? {
        if (points == null) {
            return null
        }
        val gson = Gson()
        val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
        return gson.fromJson<MutableList<DamagePoint>>(points, type)
    }
}

输出: 管道工作和增加的 id

否,因为 DamagePoint 不起作用并且没有增加

模拟器的另一个输出显示点列表 int recyclerView

是主键在类型转换器中不起作用 或者有另一种方法可以让它增加吗? 请任何帮助

我用@PrimaryKey注解并设置autoGenerate为true 试图在 val 和 var 之间切换,同样的事情

问题出在您为 no 设置的 1 整数上。这样,它就不会像 auto-increment 那样工作,因为有一个指定的整数值 (1) 而不是 0.

所以这意味着如果您将 no 设置为 0,它将像未设置的那样工作并增加值。

val no:Int = 0

此外,您可能需要将 no 名称更改为 id

问题是每次我想在 PipeLine 实体中的点列表中添加一个点时,我都试图添加完整的 DamagePoint 列表,所以我从对象中获取列表,向其添加新点并更新该管道对象的整个列表,因此找到所有点 (no) 等于 1 是正常的,因为它是它的默认值 现在我处理我添加到列表中的每个点的编号,然后再更新它并将其添加回管道对象 我找到了一种只更新管道对象中的点列表而不更新整个对象的方法
@Query("UPDATE table_Lines SET points=:points WHERE id=:id ") 有趣的 updatePointsList(id:Int,points:MutableList)

如果有人知道如何将项目添加到作为实体 属性 的可变列表 class 无需更新列表或更新实体对象 请添加答案