如何将postgresql枚举映射到scala播放模型和枚举?

时间:2015-11-16 22:56:57

标签: postgresql scala playframework enums slick

我可以在许多地方找到这个问题,但所描述的方法似乎都不适合我。 我刚刚开始探索Play with Scala(2.4.2),因此我在this page之后开始了一个简单而实用的CRUD应用程序。我创建了一个Cat模型,我想在其中添加一个状态字段,其中包含已定义的值(Awake,Sleeping,Dead)。我轻松创建了postgresql枚举,并在演变中添加:

CREATE TYPE cat_status AS ENUM ('awake', 'sleeping', 'dead');

然后,我尝试定义一个扩展Enumeration的对象,并在我的模型文件中使用类似于here中找到的代码中的特征: 包装模型

import play.api.libs.json._

sealed trait CatStatus
case object Awake extends TaskStatus
case object Sleeping extends TaskStatus
case object Dead extends TaskStatus

implicit val catStatusTypeMapper = MappedColumnType.base[CatStatus, String](
      {
        case Awake => "awake"
        case Sleeping => "sleeping"
        case Dead => "dead"
      },{
        case "awake" => Awake
        case "sleeping" => Sleeping
        case "dead" => Dead
      }
    )



case class Cat(id: Long, name: String, age: Int, color: String, picture: String, race: String, status: CatStatus)

但是当我运行"激活器编译"我收到以下错误:

[error] XXX/app/models/Cat.scala:10: expected start of definition
[error] implicit val catStatusTypeMapper = MappedColumnType.base[CatStatus, String](
[error]          ^

我尝试在对象中移动代码,例如here

object myCatMapper{
implicit val catStatusTypeMapper = MappedColumnType.base[CatStatus, String](
      {
        case Awake => "awake"
        case Sleeping => "sleeping"
        case Dead => "dead"
      },{
        case "awake" => Awake
        case "sleeping" => Sleeping
        case "dead" => Dead
      }
    )
}

但是,我收到此错误消息:

[error] XXX/app/models/Cat.scala:11: not found: value MappedColumnType
[error] implicit val catStatusTypeMapper = MappedColumnType.base[CatStatus, String](
[error]                                     ^

我尝试添加"导入scala.slick.driver.PostgresDriver.simple。"和/或"导入scala.slick.lifted。"但是"对象浮油不是包scala"的成员。

对于如何实现这个简单的事情,我将不胜感激。 谢谢大家。

0 个答案:

没有答案