나는 Play를 배우고있다! 나는 To do List tutorial을 따라 갔다. 자, Anorm 대신 Squeryl을 사용하고 싶습니다. 그래서이 튜토리얼을 번역하려했는데 실제로 작동합니다.Play에서 Squeryl 트랜잭션 방지! 컨트롤러
아직도, 저를 괴롭히는 작은 것이 하나 있습니다. 여기 내 모델
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>
를 들면, 마찬가지로 작업을 업데이트하거나 삭제하는 방법과 달리 컨트롤러 작업 내에서 트랜잭션을 관리해야했습니다. 나는 all
방법 inTransaction
를 이동하는 경우
, 나는 예외를 얻을,
[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 트랜잭션을 사용하고 이러한 세부 정보를 컨트롤러 수준까지 노출시키지 않을 수 있습니까?
왜 Iterable을 모델의 목록으로 변환하지 않으시겠습니까? –