9

enumで作成された PostgreSQL テーブルがあります。

CREATE TYPE file_status AS ENUM ('new', 'uploading', 'queued', 'processing', 'done', 'failed');

および関連するフィールド

CREATE TABLE files ( ...
    status file_status NOT NULL,
    ...
);

Scala 2.10 と Typesafe Slick 1.0.1 を使用して、Files テーブルへのマッピングを作成しました。これは、カスタムタイプである文字列statusを必要とするフィールドを除いてはうまく機能します。file_status

def status = column[FileStatus]("status")

私はSlickのTypeMapperで遊んでいますが、それを機能させる方法がよくわかりません:

sealed trait FileStatus

implicit val fileStatusMapper: TypeMapper[String] = base[FileStatus, String](
  s => s.toString,
  f => f(FileStatus)
) 

次のエラーが表示されます:タイプが一致しません。見つかった: models.Files.FileStatus.type 必須: Int

なぜ Int が必要なのですか? TypeMapperのせいですか?私も試してみました

...
f => f.toString
// type mismatch; found : String required: models.Files.FileStatus

f => f
// type mismatch; found : String required: models.Files.FileStatus

このマッピングを理解するのに役立つ指針をありがとう。

4

2 に答える 2

3

滑らかな 3.x バージョン:

    sealed trait FileStatus
    case object New extends FileStatus
    case object Uploading extends FileStatus
    ...

   implicit val fileStatusColumnType = MappedColumnType.base[FileStatus, String](
   {
     case New => "new"
     case Uploading => "uploading"
     ...
    },{
     case "new" => New
     case "uploading" => Uploading
     ...
   }
 )
于 2016-09-22T11:27:42.570 に答える