Как использовать сопоставленные таблицы Слика с внешними ключами?

борюсь со сликомПоднятые встраиваемые и сопоставленные таблицы. API кажется мне странным, может быть, просто потому, что он структурирован таким образом, чтомне незнакомо

Я хочу построить Task / Todo-List. Есть две сущности:

Задача: каждая задача имеет необязательную ссылку на следующую задачу. Таким образом, создается связанный список. Предполагается, что пользователь может упорядочить задачи по приоритету. Этот порядок представлен ссылками от задачи к задаче.

TaskList: Представляет TaskList с меткой и ссылкой на первую задачу в списке.

case class Task(id: Option[Long], title: String, nextTask: Option[Task])

case class TaskList(label: String, firstTask: Option[Task])

Теперь я попытался написать объект доступа к данным (DAO) для этих двух объектов.

import scala.slick.driver.H2Driver.simple._
import slick.lifted.MappedTypeMapper

implicit val session: Session = Database.threadLocalSession
val queryById = Tasks.createFinderBy( t => t.id )

def task(id: Long): Option[Task] = queryById(id).firstOption

  private object Tasks extends Table[Task]("TASKS") {
    def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
    def title = column[String]("TITLE")
    def nextTaskId = column[Option[Long]]("NEXT_TASK_ID")
    def nextTask = foreignKey("NEXT_TASK_FK", nextTaskId, Tasks)(_.id)
    def * = id ~ title ~ nextTask  (Task, Task.unapply _)
  }

  private object TaskLists extends Table[TaskList]("TASKLISTS") {
    def label = column[String]("LABEL", O.PrimaryKey)
    def firstTaskId = column[Option[Long]]("FIRST_TASK_ID")
    def firstTask = foreignKey("FIRST_TASK_FK", firstTaskId, Tasks)(_.id)
    def * = label ~ firstTask  (Task, Task.unapply _)
  }

К сожалению, это не компилируется. Проблемы в* проекция обеих таблиц наnextTask соответственно.firstTask

could not find implicit value for evidence parameter of type scala.slick.lifted.TypeMapper[scala.slick.lifted.ForeignKeyQuery[SlickTaskRepository.this.Tasks.type,justf0rfun.bookmark.model.Task]]could not find implicit value for evidence parameter of type scala.slick.lifted.TypeMapper[scala.slick.lifted.ForeignKeyQuery[SlickTaskRepository.this.Tasks.type,justf0rfun.bookmark.model.Task]]

Я попытался решить это с помощью следующего TypeMapper, но это тоже не компилируется.

  implicit val taskMapper = MappedTypeMapper.base[Option[Long], Option[Task]](
    option => option match {
      case Some(id) => task(id)
      case _ => None
    },
    option => option match {
      case Some(task) => task.id
      case _ => None
    })
could not find implicit value for parameter tm: scala.slick.lifted.TypeMapper[Option[justf0rfun.bookmark.model.Task]]not enough arguments for method base: (implicit tm: scala.slick.lifted.TypeMapper[Option[justf0rfun.bookmark.model.Task]])scala.slick.lifted.BaseTypeMapper[Option[Long]]. Unspecified value parameter tm.

Основной вопрос: как пользоваться Slick 'Правильно ли сняты встраиваемые и сопоставленные таблицы? Как мне заставить это работать?

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос