【发布时间】:2021-11-02 19:03:22
【问题描述】:
鉴于我有 3 个实体,Order 包含 LineItem 的列表,每个 LineItem 将通过 productId 与一个 Product 关联。
从OrderDao获取数据时,product字段返回null,但lineItem字段有数据的问题。虽然我可以使用 ProductWithLineItem 数据。
已经尝试了很多解决方法,但它不起作用。
这是我的实体和 dao 代码
实体
@Entity(tableName = DataConstant.ORDER_TABLE)
data class Order(
@PrimaryKey
@ColumnInfo(name = "orderId")
val id: String,
@ColumnInfo(name = "status")
var status: String
)
@Entity(tableName = DataConstant.LINE_ITEM_TABLE)
data class LineItem(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "lineItemId")
val id: Long,
@ColumnInfo(name = "productId")
val productId: String,
@ColumnInfo(name = "orderId")
val orderId: String,
@ColumnInfo(name = "quantity")
var quantity: Int,
@ColumnInfo(name = "subtotal")
var subtotal: Double
)
@Entity(tableName = DataConstant.PRODUCT_TABLE)
data class Product(
@PrimaryKey
@NonNull
@ColumnInfo(name = "productId")
val id: String,
@ColumnInfo(name = "name")
var name: String?,
@ColumnInfo(name = "description")
var description: String?,
@ColumnInfo(name = "price")
var price: Double?,
@ColumnInfo(name = "image")
var image: String?,
)
关系 POJO
data class ProductAndLineItem(
@Embedded val lineItem: LineItem?,
@Relation(
parentColumn = "productId",
entityColumn = "productId"
)
val product: Product?
)
data class OrderWithLineItems(
@Embedded var order: Order,
@Relation(
parentColumn = "orderId",
entityColumn = "orderId",
entity = LineItem::class
)
val lineItemList: List<ProductAndLineItem>
)
道
@Dao
interface OrderDao {
@Transaction
@Query("SELECT * FROM `${DataConstant.ORDER_TABLE}` WHERE orderId = :id")
fun getById(id: String): Flow<OrderWithLineItems>
}
Dao运行后的结果
【问题讨论】:
标签: android sqlite kotlin android-room android-architecture-components