使用 Kotlin Exposed Dao 返回子表的嵌套列表

问题描述 投票:0回答:1

我有一个包含商店及其销售商品的父表。然后,我有一个子表,其中包含商店中每种商品的销售单位。我想要一个公开的

DAO entity
,它为我提供父表中的商品和商店详细信息,以及子表中每个商品的销售单位(作为嵌套列表)。

我知道可以使用

referrersOn
referencedOn
,但是在文档 StarWars 示例中,子表需要有一列指示它所连接的parent_id 行。这在我的情况下不起作用,因为我的子表可以关联到多个parent_id。

如何更新以下代码,以便父实体类使用

item
列作为两个表之间的链接,返回已售单位的嵌套列表?

家长表

parent_id 店铺名称 地区 项目
1 商店1 德克萨斯州 项目A
2 商店2 内华达州 项目B
3 商店3 佛罗里达 项目A
4 商店4 内华达州 项目B
5 商店5 亚利桑那州 项目A
// Table A definition
object TableA : IntIdTable() {
    val storeName = varchar("store_name", 50).uniqueIndex()
    val region = varchar("region", 50)
    val item = varchar("item", 50)
}

// Entity class for Table A
class TableAEntity(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<TableAEntity>(TableA)

    var storeName by TableA.storeName
    var region by TableA.region
    var item by TableA.item
}

儿童桌

child_id 项目 日期 已售出单位
1 项目A 2023-05-20 10
2 项目A 2023-05-21 15
3 项目A 2023-05-22 8
4 项目B 2023-05-20 5
5 项目B 2023-05-21 12
6 项目B 2023-05-22 6
// Table B definition
object TableB : IntIdTable() {
    val item = reference("item", TableA)
    val date = date("date")
    val unitsSold = integer("units_sold")
}

// Entity class for Table B
class TableBEntity(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<TableBEntity>(TableB)

    var item by TableB.item
    var date by TableB.date
    var unitsSold by TableB.unitsSold
}
kotlin dao kotlin-exposed
1个回答
-1
投票

听起来您需要多对多参考。

创建一个中间表用于存储引用:

object TableATableB : Table() {
    val tableA = reference("tableA", TableA)
    val tableB = reference("tableB", TableB)
    override val primaryKey = PrimaryKey(tableA, tableB)
}

添加对表A的引用

// Table A definition
// Entity class for Table A
class TableAEntity(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<TableAEntity>(TableA)

    var storeName by TableA.storeName
    var region by TableA.region
    var item by TableA.item
    var tableB by TableAEntity via TableATableB
}

请参阅 https://github.com/JetBrains/Exposed/wiki/DAO#many-to-many-reference

© www.soinside.com 2019 - 2024. All rights reserved.