我保留了一份按“顺序”排列的产品清单。当我试着从房间里拿一份产品清单的时候。我得到以下错误。但我做了一个TypeConvertor。会有什么错误呢?
订单
@Entity(tableName = Order.TABLE_NAME)
@JsonClass(generateAdapter = true)
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,
@TypeConverters(Converters::class)
@ColumnInfo(name = "listProduct")
var listProduct: List<Product>? = null,
val publicOrderId: String
) {
companion object {
const val TABLE_NAME = "mau_order"
}
}
产品
@Parcelize
@JsonClass(generateAdapter = true)
data class Product(
@SerializedName("id")
@PrimaryKey
var id: Long = -1,
@SerializedName("order_id") var orderId: Long = -1,
@SerializedName("name") var name: String = "name product",
@SerializedName("packaging") var packaging: String? = "1 кг",
@SerializedName("path_image") var pathImage: String = "",
@SerializedName("price") var price: Double = 0.0,
@SerializedName("price_discount") var priceDiscount: Double = 0.0,
@SerializedName("product_id") var productId: Int = -1,
@SerializedName("quantity") var quantity: Double = 0.0,
@SerializedName("units") var units: String = "ШТ",
@SerializedName("created_at") var createdAt: String = "",
@SerializedName("updated_at") var updatedAt: String = "",
@SerializedName("brgew") var brgew: String = "",
@SerializedName("gewei") var gewei: String = "кг"
) : Parcelable
命令道
@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>)
/**
* 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(order: Order)
/**
* 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): LiveData<Order>
//ERROR
@Query("SELECT listProduct FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getBasketById(orderId: Long): LiveData<Order>
/**
* Fetches all the orders from the [Order.TABLE_NAME] table.
* @return [Flow]
*/
@Query("SELECT * FROM ${Order.TABLE_NAME}")
fun getAllOrders(): LiveData<List<Order>>
}
转换器
@TypeConverter
fun stringToProductList(data: String?): MutableList<Product> {
if (data == null) {
return Collections.emptyList()
}
val listType = object : TypeToken<MutableList<Product>>() {
}.type
return gson.fromJson(data, listType)
}
@TypeConverter
fun ProductListToString(someObjects: MutableList<Product>?): String? {
if (someObjects == null) {
return null
}
return gson.toJson(someObjects)
}
错误
java:53:错误:查询返回的列在com.vepe.navigation.model.entity.product中没有字段[id,orderId,name,pathImage,price,priceDiscount,productId,quantity,units,createdAt,updatedAt,brgew,gewe],即使这些字段被注释为非空或原语。查询返回的列:[listProduct]public abstract java.util.list
求求你帮帮我!谢谢
更新我试着把@Entity注释,我不知道它们在我的情况下是否必要,但得到了以下错误
错误:查询返回得列在com.vepe.navigation.model.entity.product中没有字段[id,orderId,name,pathImage,price,priceDiscount,productId,quantity,units,createdAt,updatedAt,brgew,GEWE],即使这些字段被批注为非空或原语.查询返回的列:[listProduct]public abstract kotlinx.coroutines.flow.flow
您需要修复此查询:
@Query("SELECT listProduct FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getBasketById(orderId: Long): LiveData<Order>
问题是所选字段(ListProduct
)与返回的类型(Order
)不匹配。Room抱怨它无法理解如何构建只有一个its字段ListProduct
的Order
实例。
解决此问题的最简单方法是选择创建order
实例所需的所有字段:
@Query("SELECT * FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getBasketById(orderId: Long): LiveData<Order>
我想出了这个办法来解决问题
在订单服务中
@GET("orders/baskethistory/id/{id}")
suspend fun getBasketHistoryById(@Path("id") id: Long): Response<BasketHistory>
对象列表的数据类
data class BasketHistory(
@SerializedName("basketHistory") val listProduct : MutableList<Product>
)
刀
@Query("SELECT id,listProduct FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
fun getBasketById(orderId: Long): LiveData<BasketHistory>
试试看
我正在实现房间数据库。这是我的POJO类 这是DAO类 在运行我的代码时,我收到以下错误
下面是一个POJO示例 现在,在我的productDAO中,如果我有一个像这样的查询 我会得到这样一个错误: 查询返回的列在...Product中没有字段[price],即使它们被注释为非空或原语。查询返回的列:[id,Name] a)如果我进入我的产品并设置 错误仍然存在。 b)如果我进入我的产品和设置 错误会消失,但如果我有另一个查询,例如 因为设置了,所以价格返回为0.0。 那么如何解决这一
问题内容: 如何获取使用SQL Server的SQL查询返回的列数? 例如,如果我有如下查询: 它应该返回表A1中的总列数+表A2中的总列数。但是查询可能会更复杂。 问题答案: 这是一种方法: 您可以通过创建视图来执行类似的操作。
我正在努力学习GraphQL( 我只得到一级字段,比如: 以下是我的模式: 我的解析器: 知道我做错了什么吗?
我正在阅读大约1个oracle伪目录,即ROWNUM:它的返回编号指示oracle返回行的顺序。 我在这里遇到了一些行为, 示例1。创建脚本: 2插入脚本: 从客户中选择*;按照上述插入的相同顺序执行, 在这里,如果我运行选择查询, 我得到以下输出: 这里ID=2首先插入,但oracle返回第二行, 但是,如果您包含具有ROWNUM和PK的表中的任何其他列,例如 我得到了正确的输出(正确的插入顺序
本文向大家介绍Mybatis查询方法如何实现没有返回值,包括了Mybatis查询方法如何实现没有返回值的使用技巧和注意事项,需要的朋友参考一下 最近在项目开发中发现一件非常有意思的事情,一个Mapper.java文件中有一个查询方法没有返回值,这引起了我的好奇心, 没有返回值查询还有什么用呢? 仔细去看这个Mapper.java文件对应的xml文件发现,查询正常,肯定是有返回值的。 可是为什么方法