Slick - Einsatz foreignKey-constraint und Zugriff auf referenzierte Objekt direkt als Spalte

Ich habe zwei Modelle (sagen, Lieferanten und Kaffee) und Kaffee-Modell hat die foreign-key-Referenz auf Lieferant Modell. Während ddl, dass ich diese Beziehung bestehen in der Erstellung der Tabelle. Aber ich möchte auch die Möglichkeit zu verweisen, die Anbieter-Objekt-durch Kaffee-Objekts wie coffeeObj.supplier.name. Unten ist mein dummy-code. Ich bin mit MappedTable, foreignKey und TypeMapper.

import scala.slick.driver.H2Driver.simple._
import Database.threadLocalSession

object SlickTest {
  //Supplier
  case class Supplier(id: Option[Int], name: String)
  object Suppliers extends Table[Supplier]("supplier") {
    def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
    def name = column[String]("name")
    def * = id.? ~ name <> (Supplier, Supplier.unapply _)
    def findOneById(id: Int): Supplier = 
      this.map { e => e }.where(r => r.id === id).firstOption.get
  }

  //Implicit Conversion from Supplier to Int
  implicit val supTypeMapper = MappedTypeMapper.base[Supplier, Int](
    { s => s.id.get }, { id => Suppliers.findOneById(id) })

  //Coffee
  case class Coffee(name: Option[String], sup: Supplier, price: Double)
  object Coffees extends Table[Coffee]("coffee") {
    def name = column[String]("cof_name", O.PrimaryKey)
    def sup = column[Supplier]("supplier")
    def price = column[Double]("price")
    def * = name.? ~ sup ~ price <> (Coffee, Coffee.unapply _)

    def supplier = foreignKey("SUP_FK", sup, Suppliers)(_.id)
  }
}

Den code scheitert an der letzten Zeile für die definition von supplier. Könnte jemand alle vergossen Licht?

Schreibe einen Kommentar