scala + slick-pg + неявный

Я попытался добавить столбец на основе примера [пример slick-pg][1]

Также добавлено в таблицу классов неявное

 implicit val pointFormat = MyFormats.geometryFormat[Point]

но есть ошибка компиляции

could not find implicit value for parameter tt: slick.ast.TypedType[com.vividsolutions.jts.geom.Point]

Что я сделал не так? не могли бы вы привести пример работы? ^

BR!


person initmax    schedule 27.07.2015    source источник


Ответы (2)


У меня работает что-то в следующей настройке:

Во-первых, объявление моей таблицы:

 class EventTable(tag: Tag) extends Table[Event](tag, "event"){
   def uid = column[String]("uid", O.PrimaryKey, O.Length(36))
   def userUid = column[String]("user_uid")
   def location = column[Point]("location")
   def start = column[LocalDateTime]("start")
   def end = column[LocalDateTime]("end")
   def visible = column[Boolean]("visible")
   def attending = column[Int]("attending")
   def required = column[Int]("required")
   def createdAt = column[LocalDateTime]("created_at")

   def * = (uid, userUid, location, start, end, visible, attending, required, createdAt) <>
      (Event.tupled, Event.unapply)
 }

Мне нужны расширения: поддержка времени java8 (LocalDateTime) и геоматериалы (Point). Это отражено в моем build.sbt — я использую версию 0.11.0 для slick-pg:

"com.github.tminglei" %% "slick-pg"                             % slickPgV,
"com.github.tminglei" %% "slick-pg_jts"                         % slickPgV,
"com.github.tminglei" %% "slick-pg_date2"                       % slickPgV,

Теперь объявление драйвера:

import com.github.tminglei.slickpg._

trait ExtendedPostgresDriver extends ExPostgresDriver
  with PgArraySupport
  with PgDate2Support
  with PgRangeSupport
  with PgHStoreSupport
  with PgSearchSupport
  with PgPostGISSupport
  with PgNetSupport
  with PgLTreeSupport {

   override val api = MyAPI

   object MyAPI extends API with ArrayImplicits
                            with DateTimeImplicits
                            with PostGISImplicits
                            with NetImplicits
                            with LTreeImplicits
                            with RangeImplicits
                            with HStoreImplicits
                            with SearchImplicits
                            with SearchAssistants {
   implicit val strListTypeMapper = new SimpleArrayJdbcType[String]("text").to(_.toList)

  }
}

object ExtendedPostgresDriver extends ExtendedPostgresDriver

Итак, возьмите вещи времени Java 8. Вы можете заметить, что драйвер использует PgDate2Support, что позволяет мне использовать неявный DateTimeImplicits. Импортируя ExtendedPostgresDriver.api._ в интересующий меня класс, я могу использовать в определении таблицы тип LocalDateTime, который мне нужен.

То же самое для Point: PgPostGISSupport -> PostGISImplicits -> Point.

Надеюсь это поможет

person Radu    schedule 31.01.2016

При написании интеграции с PostgresDriver, следуя этим инструкциям, добавьте with PostGISImplicits в объект, который переопределяет api (эта черта в пример не входит).

person Decly    schedule 17.01.2016