我想从数据库中读取元素并将它们作为JSON对象返回。
Scalatra设置为返回JSON。 Databaseschema已创建。 玩家被添加。
以下代码似乎是主要问题:
get("/") {
inTransaction {
List(from(MassTournamentSchema.players)(s => select(s)))
}
}
我收到以下错误: "没有会话绑定到当前线程,必须通过Session.create创建会话并通过' work'绑定到线程。或者' bindToCurrentThread'通常,当在transaction / inTrasaction块"
之外执行语句时会发生此错误我想要做到这一点,只需添加类似" Session.create"可能不是真正的正确方法。
任何人都可以帮助scalatra-noob吗? : - )
答案 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列表,并防止后续迭代导致的任何延迟评估错误。