データベース トランザクションを実行します。
def create(model: Model, orderNum: String) = {
db.handle withSession { implicit ss: Session=>
ss.withTransaction { // auto commit now set to false
val result = for {
uid <- repo.user.create(model)
mid <- repo.membership.create(uid)
oid <- repo.orders.create(model, uid, orderNum)
} yield uid
result fold(
e=> { ss.rollback; Left(e) },
s=> { Cache.remove("member.directory"); Right(s) }
)
}
}
}
リポジトリのユーザー作成実装が暗黙的なセッションを取る場合、それは上記の withTransaction が有効なセッションと同じセッションですか、それとも暗黙的な値は「is the」ではなく「is a」ですか?
def create[T <: User](t: T)(implicit ss: Session) = // what Session is this?
for {
uid <- either( Users.insert( Users(t) ), i18n("user not created") )
ur <- either( UserRoles.insert( UserRole(uid, t.role) ), i18n("user role not created") )
} yield uid
セッションを明示的に渡し、repo.user.create(model)(ss)
明示的なセッションを作成することもできますが、より簡潔で便利な暗黙のアプローチが同じ結果、トランザクション対応セッションを提供するかどうかを知りたいです。