У меня была аналогичная путаница, когда я пытался заставить мои перечисления postgreSQL работать с slick. Slick-pg позволяет вам использовать перечисления Scala с перечислениями ваших баз данных, а набор тестов показывает как .
Ниже приведен пример.
Скажем, у нас есть этот перечисляемый тип в нашей базе данных.
CREATE TYPE Dog AS ENUM ('Poodle', 'Labrador');
Мы хотим иметь возможность сопоставлять их с перечислениями Scala, чтобы мы могли успешно использовать их со Slick. Мы можем сделать это с помощью slick-pg, расширения для slick.
Во-первых, мы делаем Scala-версию вышеуказанного перечисления.
object Dogs extends Enumeration {
type Dog = Value
val Poodle, Labrador = Value
}
Чтобы получить дополнительную функциональность от slick-pg, мы расширяем обычный PostgresDriver и говорим, что хотим сопоставить наше перечисление Scala с перечислением PostgreSQL (не забудьте изменить драйвер slick в application.conf на тот, который вы создали).
object MyPostgresDriver extends PostgresDriver with PgEnumSupport {
override val api = new API with MyEnumImplicits {}
trait MyEnumImplicits {
implicit val dogTypeMapper = createEnumJdbcType("Dog", Dogs)
implicit val dogListTypeMapper = createEnumListJdbcType("Dog", Dogs)
implicit val dogColumnExtensionMethodsBuilder = createEnumColumnExtensionMethodsBuilder(Dogs)
implicit val dogOptionColumnExtensionMethodsBuilder = createEnumOptionColumnExtensionMethodsBuilder(Dogs)
}
}
Теперь, когда вы хотите создать новый класс модели, просто используйте соответствующее перечисление Scala.
case class User(favouriteDog: Dog)
И когда вы делаете все махинации с таблицей DAO, вы снова можете просто использовать его.
class Users(tag: Tag) extends Table[User](tag, "User") {
def favouriteDog = column[Dog]("favouriteDog")
def * = (favouriteDog) <> (Dog.tupled, Dog.unapply _)
}
Очевидно, вам нужно перечисление Scala Dog везде, где вы его используете.
Из-за ошибки в slick в настоящее время вы не можете динамически ссылаться на пользовательский драйвер slick. в application.conf
(должно работать). Это означает, что вам нужно либо запустить play framework с запуском, а не выполнять динамическую перекомпиляцию, либо вы можете создать автономный проект sbt только с пользовательским гладким драйвером и зависеть от него локально.
person
Iain
schedule
18.06.2015
trait SomeEnum
сcase object A1
и т. д. дочерними элементами вместо Enumeration. - person cvogt   schedule 09.04.2014