【问题标题】:SQLDelight and data classes with one to many relations in KotlinSQLDelight 和 Kotlin 中具有一对多关系的数据类
【发布时间】:2022-10-23 18:06:40
【问题描述】:

我正在尝试使用 Kotlin Multiplatform 创建一个小型应用程序,我可以在其中保存书名及其作者,但我正在努力处理数据类以及如何将它们映射在一起以便我获得作者所有的书籍和发布日期.

CREATE TABLE book(
id INTEGER NOT NULL,
name TEXT NOT NULL,
publishDate INTEGER NOT NULL,
authorId INTEGER NOT NULL
)

CREATE TABLE author(
id INTEGER NOT NULL,
name TEXT NOT NULL
)

这是我的数据类:

@Serializable
data class bookEntity(
  id: Int,
  name: String,
  authorId: Int
)

@Serializable
data class authorEntity(
  id: Int,
  authorName: String
  books: List<bookEntity>
)

和我的查询:

selectAuthors:
SELECT * FROM author
JOIN book ON book.authorId = author.id
WHERE book.authorId = author.id

我尝试了以下映射,但没有奏效:

private fun mapAuthor(
  id: Int,
  authorName: String,
  bookId: String,
  name: String,
  publishDate: Long
): Author(
  return Author (
    id = id,
    authorName = authorName,
    book = List<BookEntity>(
      id = bookId,
      name = name,
      publishDate = publishDate
    )
  )
)

我如何使用这样的列表? 每一个帮助表示赞赏!

【问题讨论】:

    标签: android kotlin data-class kmm sqldelight


    【解决方案1】:

    JOINON 子句是链接两个表的条​​件。您无需重复 WHEN 子句中的条件。使用WHEN 进一步缩小查询范围,例如,如果您正在搜索特定的作者姓名。

    SELECT * FROM author
    JOIN book ON book.authorId = author.id
    WHERE author.name LIKE 'John%';
    

    如果要查询所有作者,只需将WHEN 完全删除即可。

    此外,您不需要创建数据类并自己进行映射。 SQLDelight 已经为您的查询创建了数据类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2021-10-08
      • 2021-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多