scalatra< squeryl<选择ALL |总是

时间:2014-10-17 19:19:07

标签: scalatra squeryl

我想从数据库中读取元素并将它们作为JSON对象返回。

Scalatra设置为返回JSON。 Databaseschema已创建。 玩家被添加。

以下代码似乎是主要问题:

get("/") {
  inTransaction {
    List(from(MassTournamentSchema.players)(s => select(s)))
  }
}

我收到以下错误: "没有会话绑定到当前线程,必须通过Session.create创建会话并通过' work'绑定到线程。或者' bindToCurrentThread'通常,当在transaction / inTrasaction块"

之外执行语句时会发生此错误

我想要做到这一点,只需添加类似" Session.create"可能不是真正的正确方法。

任何人都可以帮助scalatra-noob吗? : - )

1 个答案:

答案 0 :(得分:1)

我认为你的评论是正确的。 inTransaction块将JDBC连接绑定到线程局部变量并在其上启动连接。如果选择不在同一个主题上发生,您将看到类似于您收到的错误。我建议您尝试两件事:

稍后开始您的交易

List(inTransaction {
  from(MassTournamentSchema.players)(s => select(s))
})

我不熟悉Scalatra的列表,但它可能会接受一个名字参数并稍后在另一个线程上执行它。

强制急切评估查询

inTransaction {
  List(from(MassTournamentSchema.players)(s => select(s)).toList)
}

这里.toList调用将立即将查询对象Squeryl返回到Scala列表,并防止后续迭代导致的任何延迟评估错误。