1
我在調試事務查詢塊時遇到了這個頭部劃傷器。奇怪的摺疊範圍問題
由於某些原因,儘管在摺疊左/失敗操作中發生連接回滾,成功/正確結果也得到回滾。
例子:
// returns Either[String, Int]
db.handle withSession { implicit ss: Session=>
ss.withTransaction {
val result = for {
u <- either(User.insert(User(model)), ss)
ur <- either(UserRole.insert(UserRole(u)), ss)
m <- either(Membership.insert(Membership(u)), ss)
} yield u
// bad: rollback occurs regardless of left/right outcome
result fold({ss.rollback; Left(_)}, Right(_))
// good: rollback occurs as expected on left outcome only
result fold(e=>{ss.rollback; Left(e)}, Right(_))
+1事實上,不僅會發射導彈,還會發送來自憤怒客戶的現代信件;-)我感到困惑至少說,但現在我知道,摺疊塊的參數化是必須的。感謝你的線索...... – virtualeyes 2012-07-06 01:57:16