Slick 1.0 とケーキ パターンを使用して postgresql データベースに接続するプロジェクトに取り組んでいます。
現時点では、すべてが正常に機能しているように見えますが、追加するテーブルがさらに多くあり、すべてのテーブルに含まれる共通の列がいくつかあることに気付きました。共通フィールドを含む特性を作成できるようにしたいのですが、これを機能させる方法がわかりません。(私は scala にはかなり慣れていませんが、基本はかなりよく理解できていると思います。)
これは、私がやりたいことをうまく説明する例です。
One.scala:
package models.db.slick
import java.util.UUID
import play.api.db.slick.Profile
case class One(common1:UUID, common2:String, unique1:String)
trait OneComponent{this: Profile =>
import profile.simple._
object Ones extends Table[One]("One") with CommonColumns{
def unique1 = column[String]("unique1")
def * = common1 ~ common2 ~ unique1 <> (One.apply _, One.unapply _)
}
}
ColumnColumns.scala:
package models.db.slick
import java.util.UUID
import play.api.db.slick.Profile
trait CommonColumns{
def common1 = column[UUID]("common1")
def common2 = column[String]("common2")
}
ColumnColumns トレイトは column[T] を認識しないため、これはコンパイルされません。Table の self 型を指定しようとしましたが、それ自体が scala.slick.driver.BasicTableComponent トレイトにある Table オブジェクトを取得する方法がわかりません。また、次のような列関数を実装する自己型を指定しようとしました。
trait CommonColumns{ this => {def column[C](n: String, options:
scala.slick.lifted.ColumnOption[C]* )
(implicit tm:scala.slick.lifted.TypeMapper[C]
): scala.slick.lifted.Column[C]}
...
}
しかし、それはうまくいきません。おそらく構文が間違っている可能性がありますが、これを行う方法の良い例が見つかりません。
どう思いますか?これを行う良い方法はありますか?