在 Slick 3 中,SQL-如何使用映射大小写 class 编译插入?
In Slick 3, how does one SQL-Compile an insert using a mapped case class?
要SQL-编译一个查询,您需要编译一个函数,它为每个查询参数arg: type
接受一个Rep[type]
类型的提升参数。
我有一个案例 class JobRecord
和一个 TableQuery jobRecords
。
所以要插入一个 JobRecord case-class 实例,我需要能够说出如下内容:
val qMapToId = (jobRecords returning jobRecords.map(_.id))
def ucCreate(jobRecord: Rep[JobRecord]) = qMapToId += jobRecord
val cCreate = Compiled(ucCreate _)
但是当然这不会编译,因为 += 不接受 Rep,而且我不确定 Rep[JobRecord] 是否有效。
我尝试了很多东西,但不值得展示,包括混入 Monomorphic Case Classes 指导。我可能有几次远离解决方案。指向工作示例的指针会很棒!
您无需执行任何操作,val qMapToId = (jobRecords returning jobRecords.map(_.id))
会在编译时(即在容器启动时)生成一次语句。
Compiled
替换了新 API 中的 Parameters
,并开始用于选择、更新和(我相信)删除您绑定占位符以生成准备好的语句的位置.对于插入语句,没有什么可以绑定的,您已经有了 +=
.
的实例
您可以按如下方式使用 TableQuery[]。
# define TableQuery of JobRecord
case class JobRecordRow(...)
class JobRecord(tag:Tag) extends Table[JobRecordRow](tag, "JOB_TABLE_NAME") {
}
# define compiled query
val insert = Compiled( TableQuery[JobRecord].filter(_ => true:Rep[Boolean]))
val stmt = (insert += JobRecordRow(...))
db.run( stmt)
编译查询似乎有点棘手。但是,当我按照其他文章中的建议尝试 Compiled(TableQuery[JobRecord])
时,它没有用。通过添加 filter()
,我可以构建插入查询。
更新于 2019-07-21
代替filter()
,可以使用map(identity)
。
TableQuery[JobRecord].map(identity)
要SQL-编译一个查询,您需要编译一个函数,它为每个查询参数arg: type
接受一个Rep[type]
类型的提升参数。
我有一个案例 class JobRecord
和一个 TableQuery jobRecords
。
所以要插入一个 JobRecord case-class 实例,我需要能够说出如下内容:
val qMapToId = (jobRecords returning jobRecords.map(_.id))
def ucCreate(jobRecord: Rep[JobRecord]) = qMapToId += jobRecord
val cCreate = Compiled(ucCreate _)
但是当然这不会编译,因为 += 不接受 Rep,而且我不确定 Rep[JobRecord] 是否有效。
我尝试了很多东西,但不值得展示,包括混入 Monomorphic Case Classes 指导。我可能有几次远离解决方案。指向工作示例的指针会很棒!
您无需执行任何操作,val qMapToId = (jobRecords returning jobRecords.map(_.id))
会在编译时(即在容器启动时)生成一次语句。
Compiled
替换了新 API 中的 Parameters
,并开始用于选择、更新和(我相信)删除您绑定占位符以生成准备好的语句的位置.对于插入语句,没有什么可以绑定的,您已经有了 +=
.
您可以按如下方式使用 TableQuery[]。
# define TableQuery of JobRecord
case class JobRecordRow(...)
class JobRecord(tag:Tag) extends Table[JobRecordRow](tag, "JOB_TABLE_NAME") {
}
# define compiled query
val insert = Compiled( TableQuery[JobRecord].filter(_ => true:Rep[Boolean]))
val stmt = (insert += JobRecordRow(...))
db.run( stmt)
编译查询似乎有点棘手。但是,当我按照其他文章中的建议尝试 Compiled(TableQuery[JobRecord])
时,它没有用。通过添加 filter()
,我可以构建插入查询。
更新于 2019-07-21
代替filter()
,可以使用map(identity)
。
TableQuery[JobRecord].map(identity)