scala - 为什么在 ScalaQuery 的 "Missing parameter type"子句中访问表时会出现 "withTransaction"?

标签 scala scalaquery

这段代码:

def insAll(values: MyRdt*) {
  Db.withTransaction(session => { // Db is an org.scalaquery.session.Database instance
    MyTable.insertAll(values: _*)(session)
  })
}

无法编译。错误是

... missing parameter type
[error]     Db.withTransaction(session => {
                               ^

有什么想法吗?

如果我访问预定义的查询而不是 MyTable.insertAll(values: _*),它可以正常编译。

奇怪的是,如果我把它分成 2 个函数,比如

def insAllS(values: MyRdt*)(session: Session) {
  MyTable.insertAll(values: _*)(session)
}

def insAll(values: MyRdt*) {
  Db.withTransaction(session => {
    insAllS(values: _*)(session)
  })
}

编译没有错误。

PS:MyRdt是表记录元组的类型别名。

最佳答案

正在使用类型安全性较低(运行时)的 session 处理程序;如果您在 threadLocalSession 范围内,则以下内容应该有效:

import org.scalaquery.session.Database.threadLocalSession

def insAll(values: MyRdt*) {
  Db.withTransaction { implicit ss: session =>
    MyTable.insertAll(values: _*)
  }
}

但是,就回答您的问题而言:编译时 session 处理程序,假设您已尝试指定传递到 block 中的类型是 session :

import org.scalaquery.session._

def insertAll(values: MyRdt*) {
  Db.withTransaction { ss: Session =>
    Foo.insertAll(values: _*)(ss)
  }
}

关于scala - 为什么在 ScalaQuery 的 "Missing parameter type"子句中访问表时会出现 "withTransaction"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10202048/

相关文章:

database - scalaquery 中的不同开发/生产数据库

xml - 如何使用外部 jar 和 Maven 编译/打包 Spark 2.0 项目

scala - Spark 斯卡拉 GraphX : Creating a Weighted Directed Graph

sql - ScalaQuery 多个主键和外键

scala - 如何获取刚刚由 ScalaQuery 插入的自增 ID

scala - 在 Tomcat 中使用动态数据源

scala - 如何在 ScalaQuery 中获取类对象作为结果而不是元组?

python - 从任务中调用 Java/Scala 函数

r - Spark是否支持melt和dcast

scala - 将Map [K,Option [V]]转换为Map [K,V]的更好方法