进行数据库事务:
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) }
)
}
}
}
如果存储库用户创建实现采用隐式 Session,它是否与上面启用了 withTransaction 的 Session 相同,或者是隐式值“is a”而不是“is the”身份?
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)
并创建显式会话,但我很想知道更简洁/方便的隐式方法是否提供相同的结果,即启用事务的会话。