2

モデルユーザーを更新するためのdaoを書いています。コードは次のとおりです。

  case class User(id: Option[String] = None, username: String, password: String)


  object Users extends Table[User]("user") {

    // .... some column defines

    def * = id.? ~ username ~ password <>(User, User.unapply _)


    def byId(id: String) = Query(Users).filter(_.id === id)

    // user.id will be None since id is passed as parameter.
    def update(id: String, user: User)(implicit session: Session) = {
      byId(id).update(user)
      getById(id)
    }

このエラーが発生しました:

[error]     JdbcSQLException: NULL not allowed for column "id"; SQL statement:
[error] update "user" set "id" = ?, "username" = ?, "password" = ? where "user".
"id" = 'RBq0kJAs' [23502-168] (DbException.java:169)

Slick はプライマリ列「id」を更新する SQL ステートメントを生成するようですが、これには意味がありません。生成された更新クエリから id 列を削除するにはどうすればよいですか?

4

2 に答える 2

1

Slick Documentationによると:

更新は、更新するデータを選択するクエリを記述し、それを新しいデータに置き換えることによって実行されます。

したがって、クエリは を選択するidため、更新ステートメントはそれを置き換えようとします。– ドキュメントの例を確認することをお勧めします (上記のリンクを参照してください)。

于 2013-04-22T16:55:25.187 に答える