Почему typeconverter не работает? android room

#kotlin #android-room #dao

#kotlin #android-room #dao

Вопрос:

У меня есть пример кода (ниже)

 @Entity(tableName = Order.TABLE_NAME)
@JsonClass(generateAdapter = true)
@TypeConverters(QueryTypeConverter::class)
data class Order(
        @PrimaryKey(autoGenerate = true)
        val id: Long,
        val isSendCheque: Int,
        val phone: String,
        val name: String,
        val comment: String? = "",
        val timeFrom: String,
        val timeTo: String,
        var basketHistory: MutableLiveData<MutableList<Product>>,
        val publicOrderId: String
) {
    companion object {
        const val TABLE_NAME = "mau_order"
    }
}

class QueryTypeConverter {
    @TypeConverter
    fun BasketHistoryToString(basketHistory: MutableLiveData<MutableList<Product>>?): String? {
        if (basketHistory != null) {
            return Gson().toJson(basketHistory.value?.toList(), object : TypeToken<List<Product>>() {}.type)
        }
        return null
    }

    @TypeConverter
    fun stringToBasketHistory(data: String?): MutableLiveData<MutableList<Product>>? {
        if (data != null) {
            return MutableLiveData<MutableList<Product>>(
                    Gson().fromJson(data, object : TypeToken<List<Product>>() {}.type))
        }
        return null
    }
}
 

И у меня есть эта ошибка

ошибка: параметры метода запроса должны быть либо типом, который можно преобразовать в столбец базы данных, либо списком / массивом, который содержит такой тип. Вы можете рассмотреть возможность добавления адаптера типа для этого. java.util.List<com.vepe.navigation.model.Продукт> Список продуктов, @org.jetbrains.annotations.NotNull

Я не понимаю, что ему не нравится. На всякий случай я также покажу классы Dao и Product

 @Dao
interface OrdersDao {

    /**
     * Inserts [orders] into the [Order.TABLE_NAME] table.
     * Duplicate values are replaced in the table.
     * @param orders Orders
     */
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertOrders(orders: List<Order>)

   /* @Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid")
    fun updateTour(tid: Long, end_address: String?): Int*/
   @Query("UPDATE ${Order.TABLE_NAME} SET basketHistory = :productList WHERE id = :tid")
    suspend fun updateOrder(tid: Long, productList: List<Product>)

    /**
     * Deletes all the orders from the [Order.TABLE_NAME] table.
     */
    @Query("DELETE FROM ${Order.TABLE_NAME}")
    suspend fun deleteAllOrders()

    /**
     * Fetches the order from the [Order.TABLE_NAME] table whose id is [orderId].
     * @param orderId Unique ID of [Order]
     * @return [Flow] of [Order] from database table.
     */
    @Query("SELECT * FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
    fun getOrderById(orderId: Long): Flow<Order>

    @Query("SELECT name FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
    fun getBasketHistoryFromOrderById(orderId: Long): Flow<String>
    //fun getBasketHistoryFromOrderById(orderId: Long): Flow<List<Product>?>

    /**
     * Fetches all the orders from the [Order.TABLE_NAME] table.
     * @return [Flow]
     */
    @Query("SELECT * FROM ${Order.TABLE_NAME}")
    fun getAllOrders(): Flow<List<Order>>
}
 

И продукт

 @Parcelize
@Entity
@JsonClass(generateAdapter = true)
data class Product(
        @SerializedName("id")
        @ColumnInfo(name = "id")
        var id: Long = -1,
        @SerializedName("order_id")
        @ColumnInfo(name = "order_id")
        var orderId: Long = -1,
        @SerializedName("name")
        @ColumnInfo(name = "name")
        var name: String = "name product",
        @SerializedName("packaging")
        @ColumnInfo(name = "packaging")
        var packaging: String? = "1 кг",
        @SerializedName("path_image")
        @ColumnInfo(name = "path_image")
        var pathImage: String = "",
        @SerializedName("price")
        @ColumnInfo(name = "price")
        var price: Double = 0.0,
        @SerializedName("price_discount")
        @ColumnInfo(name = "price_discount")
        var priceDiscount: Double = 0.0,
        @SerializedName("product_id")
        @ColumnInfo(name = "product_id")
        var productId: Int = -1,
        @SerializedName("quantity")
        @ColumnInfo(name = "quantity")
        var quantity: Double = 0.0,
        @SerializedName("units")
        @ColumnInfo(name = "units")
        var units: String = "ШТ",
        @SerializedName("created_at")
        @ColumnInfo(name = "created_at")
        var createdAt: String = "",
        @SerializedName("updated_at")
        @ColumnInfo(name = "updated_at")
        var updatedAt: String = "",
        @SerializedName("brgew")
        @ColumnInfo(name = "brgew")
        var brgew: String = "",
        @SerializedName("gewei")
        @ColumnInfo(name = "gewei")
        var gewei: String = "кг"
) : Parcelable
 

Я буду благодарен за ваши комментарии и код на kotlin
Спасибо