2013-07-24 5 views
9

私はSlickの持ち上げられた埋め込みテーブルとマップされたテーブルに苦労しています。 APIは私には奇妙に思えるかもしれません。ちょうどそれが私にとって馴染みのない方法で構成されているからです。Slickのマップされたテーブルを外部キーで使用する方法は?

私はTask/Todo-Listを構築したいと思います。

  • タスク:各タスクには、次のタスクへのオプションの参照があります。そうすれば、リンクされたリストが構築されます。その意図は、ユーザが優先順位でタスクを注文できることである。この順序は、タスクからタスクへの参照によって表されます。
  • TaskList:ラベルを持つTaskListと、リストの最初のタスクへの参照を表します。

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


今、私は、これら2つのエンティティのためのデータアクセスオブジェクト(DAO)を書き込もうとしました。

残念ながら、それはコンパイルされません。問題は両方のテーブルの投影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.

主な質問:どのようにスリックの引き上げ埋め込み、マッピングされたテーブルの正しい方法を使用するには?どのように私はこれを動作させるには?事前に

感謝。

答えて

6

簡単な答えは、オブジェクト参照の代わりにidsを使用し、IDを逆参照するためにSlickクエリを使用することです。クエリを再利用のためのメソッドに入れることができます。あなたのケースクラスになるだろう

は、次のようになります。

case class Task(id: Option[Long], title: String, nextTaskId: Option[Long]) 
case class TaskList(label: String, firstTaskId: Option[Long]) 

私はいくつかの点で、このトピックに関する記事を公開し、それをここにリンクします。

+0

こんにちはcvogt、Slick 2.0のこの制限はまだありますか?この状況をどのように分類すべきかについての参考資料がありますか?ありがとう! –

+0

こんにちは。あなたの記事を公開しましたか? – n1r3

+0

いいえ、それはまだ私のリストに載っていて、おそらく夏になるまでに起こるでしょう。私はSlickメーリングリストで発表します。 – cvogt

関連する問題