Android 具有多对一关系的查找实体对查询参数使用了错误的id
听着,伙计们,我需要一些关于Android空间的帮助 在我的项目中有两个实体,项目和度量单位。项目只能采用一个度量单位,但度量单位可以采用多个单位 由于项目的目的是处理项目,它需要有多对一的关系,而Room没有处理这一点,因此我选择建立多对多关系,只创建一个实体进行交叉引用,以呈现相反的含义 数据库已经开始使用4个测量单位,Kg、g、L和cm,因此记录总数为4,ID分别为1、2、3和4 当我在数据库中插入测量单位为Kg的第一个项目时,它的Id=1(因为它是第一条记录),当我搜索它时,它通知Id 1,一切正常,工作正常,它返回测量单位为Kg的项目 当我将第二个项目(现在这个新项目的id为2)也注册为计量单位等于Kg时,问题开始出现。当执行搜索时,通知其id为2,他返回项目,但作为测量单位等于g(克),这也是代码2 也就是说,当房间将要装入搜索的项目的结果时,度量单位的代码被视为与项目相同的代码 Room似乎没有查看我为带有度量单位的项目创建的关系的id,但我做得不对,或者是我忘了什么 项目实体Android 具有多对一关系的查找实体对查询参数使用了错误的id,android,sqlite,android-room,Android,Sqlite,Android Room,听着,伙计们,我需要一些关于Android空间的帮助 在我的项目中有两个实体,项目和度量单位。项目只能采用一个度量单位,但度量单位可以采用多个单位 由于项目的目的是处理项目,它需要有多对一的关系,而Room没有处理这一点,因此我选择建立多对多关系,只创建一个实体进行交叉引用,以呈现相反的含义 数据库已经开始使用4个测量单位,Kg、g、L和cm,因此记录总数为4,ID分别为1、2、3和4 当我在数据库中插入测量单位为Kg的第一个项目时,它的Id=1(因为它是第一条记录),当我搜索它时,它通知Id
@Entity(
tableName = "item"
)
data class ItemEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "item_id")
var itemID: Long = 0,
@ColumnInfo(name = "description")
var description: String = "",
@ForeignKey(
entity = ComparationEntity::class,
parentColumns = ["comparation_id"],
childColumns = ["fk_comparation_id"],
onDelete = ForeignKey.CASCADE
)
@ColumnInfo(name = "fk_comparation_id")
var fkComparationID: Long = 0,
@ColumnInfo(name = "price")
private var price: Double = 0.0,
@ColumnInfo(name = "quantity")
var quantity: Double = 0.0,
@Ignore
private var priceUnit: Double = 0.0
) {
fun setPrice(price: Double) {
if (this.quantity.toFloat() != 0.00f && price.toFloat() != 0.00f) {
priceUnit = this.price.div(this.quantity)
}
}
fun getPrice() = price
fun getPriceUnit(): Double {
return priceUnit
}
}
@Entity(
tableName = "unit_measure"
)
data class UnitMeasureEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "un_meas_id")
var unMeasID: Long = 0,
val description: String,
val acronym: String,
val symbol: String
UnitMeasureEntity
@Entity(
tableName = "item"
)
data class ItemEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "item_id")
var itemID: Long = 0,
@ColumnInfo(name = "description")
var description: String = "",
@ForeignKey(
entity = ComparationEntity::class,
parentColumns = ["comparation_id"],
childColumns = ["fk_comparation_id"],
onDelete = ForeignKey.CASCADE
)
@ColumnInfo(name = "fk_comparation_id")
var fkComparationID: Long = 0,
@ColumnInfo(name = "price")
private var price: Double = 0.0,
@ColumnInfo(name = "quantity")
var quantity: Double = 0.0,
@Ignore
private var priceUnit: Double = 0.0
) {
fun setPrice(price: Double) {
if (this.quantity.toFloat() != 0.00f && price.toFloat() != 0.00f) {
priceUnit = this.price.div(this.quantity)
}
}
fun getPrice() = price
fun getPriceUnit(): Double {
return priceUnit
}
}
@Entity(
tableName = "unit_measure"
)
data class UnitMeasureEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "un_meas_id")
var unMeasID: Long = 0,
val description: String,
val acronym: String,
val symbol: String
)
与单位的关系项
@Entity(tableName = "relation_item_whit_units", primaryKeys = ["item_id", "un_meas_id"])
data class RelationItemWithUnits(
@ColumnInfo(name = "item_id")
val itemID : Long,
@ColumnInfo(name = "un_meas_id")
val unMeasID : Long
)
ItemWithUnitMeasure
data class ItemWithUnitMeasure(
@Embedded
var item: ItemEntity,
@Relation(
entity = UnitMeasureEntity::class,
parentColumn = "item_id",
entityColumn = "un_meas_id",
associateBy = Junction(RelationItemWithUnits::class)
)
var unitMeasureWithMeasureType: UnitMeasureWithMeasureType
)
@Entity(tableName = "relation_units_whit_measure_type", primaryKeys = ["un_meas_id", "measure_type_id"])
data class RelationsUnitsWithMeasuresType(
@ColumnInfo(name = "un_meas_id")
val unMeasID: Long,
@ColumnInfo(name = "measure_type_id")
val measureTypeID : Long
)
与测量类型的关系
data class ItemWithUnitMeasure(
@Embedded
var item: ItemEntity,
@Relation(
entity = UnitMeasureEntity::class,
parentColumn = "item_id",
entityColumn = "un_meas_id",
associateBy = Junction(RelationItemWithUnits::class)
)
var unitMeasureWithMeasureType: UnitMeasureWithMeasureType
)
@Entity(tableName = "relation_units_whit_measure_type", primaryKeys = ["un_meas_id", "measure_type_id"])
data class RelationsUnitsWithMeasuresType(
@ColumnInfo(name = "un_meas_id")
val unMeasID: Long,
@ColumnInfo(name = "measure_type_id")
val measureTypeID : Long
)
它需要有一个多对一的关系,由于Room没有处理这个问题,我选择建立一个多对多的关系,只创建一个实体来进行交叉引用,呈现相反的含义
我认为你在这方面有误解。实际上不包括任何多对一
关系。但是多对一
关系在表的结构意义上与一对多
相同。假设您有表A
和表B
,表A
有许多行具有表B
中相同的id。因此,表包含一对多关系
A
表中获取所有行,并从B
表中附加值,可以使用。因为A
中的一行仅与B
中的一行相关B
表中获取所有行,并从A
表中附加绑定值列表,可以使用。因为B
表中的一行与a
中的多行有关系unitMeasureId
添加到itemtentity
表中,然后使用它来获得所需的结果,就会容易得多