当前位置: 首页 > 知识库问答 >
问题:

查询返回的列没有字段

姜景辉
2023-03-14

我保留了一份按“顺序”排列的产品清单。当我试着从房间里拿一份产品清单的时候。我得到以下错误。但我做了一个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 getBasketHistoryFromOrderById(长orderId);当前的JDK版本1.8.0_272-B10有一个阻止空间增量的错误(https://bugs.openjdk.java.net/browse/jdk-8007720)。考虑使用JDK 11+或Android Studio 3.5+附带的嵌入式JDK。c:\users\mind\studioprojects\sarah_navigationproject\projectandroid\app\build\tmp\kapt3\stubs\debug\com\vepe\navigation\model\Entity\product.java:8:error:实体类必须用@Entity注释

求求你帮帮我!谢谢

更新我试着把@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 >getBasketHistoryFromOrderById(长orderId);当前的JDK版本1.8.0_272-B10有一个阻止空间增量的错误(https://bugs.openjdk.java.net/browse/jdk-8007720)。考虑使用JDK 11+或Android Studio 3.5+附带的嵌入式JDK。c:\users\mind\studioprojects\sarah_navigationproject\projectandroid\app\build\tmp\kapt3\stubs\debug\com\vepe\navigation\data\local\dao\ordersdao.java:53:警告:查询返回com.vepe.navigation.model.entity.product没有使用的一些列[listProduct]。您可以在字段上使用@ColumnInfo注释来指定映射。com.vepe.navigation.model.entity.product有一些字段[id,orderId,name,packaging,pathImage,price,priceDiscount,productId,quantity,units,createdAt,updatedAt,brgew,gewei],这些字段不由查询返回。如果不应该从结果中读取它们,您可以用@Ignore注释标记它们。您可以通过使用@SuppressWarnings(RoomWarnings.cursor_Mismatch)批注方法来取消显示此警告。查询返回的列:ListProduct。com.vepe.navigation.model.entity.product中的字段:id,orderId,name,packaging,pathImage,price,priceDiscount,productId,quantity,units,createdAt,updatedAt,brgew,GEWEI.

共有2个答案

杜志
2023-03-14

您需要修复此查询:

@Query("SELECT listProduct FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
    fun getBasketById(orderId: Long): LiveData<Order>

问题是所选字段(ListProduct)与返回的类型(Order)不匹配。Room抱怨它无法理解如何构建只有一个its字段ListProductOrder实例

解决此问题的最简单方法是选择创建order实例所需的所有字段:

@Query("SELECT * FROM ${Order.TABLE_NAME} WHERE ID = :orderId")
    fun getBasketById(orderId: Long): LiveData<Order>
令狐建修
2023-03-14

我想出了这个办法来解决问题

在订单服务中

@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文件发现,查询正常,肯定是有返回值的。 可是为什么方法