Squeryl部分更新无法编译

时间:2013-01-31 19:27:35

标签: squeryl

我不确定squeryl在这里试图告诉我什么:

错误:无法证明org.squeryl.dsl.fsm.Unconditioned =:= org.squeryl.dsl.fsm.Conditioned。

在:

inTransaction {
  update(AppDB.postTable) { p =>
    where(p.id === postId)
    set(p.upVotes := p.upVotes.~ + 1) 
}

错误发生在set子句

模式:

object AppDB extends Schema {
   val postTable = table[Post]("post")
   val replyTable = table[Reply]("reply")

   val postToReplies = oneToManyRelation(postTable, replyTable)
          .via((p,r) => p.id === r.postId)
    }

    case class Post(body: String, image:Option[String]) extends KeyedEntity[Long] {
      val id: Long = 0
      val posted: Date = new Date()
      var upVotes: Long = 0
      var downVotes: Long = 0
    }

    case class Reply(postId: Long, body: String, image:Option[String]) extends KeyedEntity[Long] {
        val id: Long = 0
        val posted: Date = new Date()
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

尝试在(){}条款周围使用where代替set,例如:

inTransaction {
  update(AppDB.postTable) ( p =>
    where(p.id === postId)
    set(p.upVotes := p.upVotes.~ + 1) 
  )
}

我不知道为什么,但我过去曾遇到{}的问题。当我针对您的代码测试更改时,问题似乎得到了解决。