我正在学习玩!我已经按照待办事项列表教程进行操作。现在,我想用 Squeryl 代替 Anorm,所以我尝试翻译教程,实际上它可以工作。
尽管如此,还是有一件小事让我感到厌烦。这是我的模型的相关部分
def all: Iterable[Task] = from(tasks) {s => select(s)}
以及控制器中相应的动作来列出所有任务
def tasks = Action {
inTransaction {
Ok(views.html.index(Task.all, taskForm))
}
}
视图包含,例如
<h1>@tasks.size task(s)</h1>
我不喜欢的是,与更新或删除任务的方法不同,我必须在控制器操作中管理事务。
如果我转向inTransaction
该all
方法,我会得到一个异常,
[RuntimeException: No session is bound to current thread, a session must be created via Session.create and bound to the thread via 'work' or 'bindToCurrentThread' Usually this error occurs when a statement is executed outside of a transaction/inTrasaction block]
因为视图试图获取 的大小tasks
,但此时事务已经关闭。
有没有办法只在模型中使用 Squeryl 事务而不将这些细节暴露给控制器级别?