Slick で多対多の関係を作ろうとするとエラーが発生します。このテストは、Slick で多対多の関係を行う方法を示しています。私はそれに従いましたが、このエラーが発生します:
Select(TableNode, "id") found. This is typically caused by an attempt to use a "raw" table object directly in a query without introducing it through a generator
その後、これはテーブルを静的な場所 (オブジェクト) で宣言してからインポートしようとしたことが原因であることがわかりました (オブジェクトが同じブロックにある場合は正常に機能します)。http://slick.typesafe.com/doc/1.0.0/lifted-embedding.html#tables
わかりましたのでval T = new Table
、 an の中にobject
答えがあります。しかし、今、私はこのエラーが発生しています:
recursive method bs needs result type
であり、 ではない場合、結果の型は必要ありませobject
んval
。の使用について聞いたclass
ことがありますが、これを行う方法の例が見つかりません。
多対多のモデルを宣言し、別の場所からインポートするにはどうすればよいですか?
編集:これが私が何を意味するかを示す要点です: https://gist.github.com/pjrt/5332311
最初のテストを実行すると、問題なく合格します。
2 番目のテストを実行すると、次のエラーがスローされます。
scala.slick.SlickException: Select(TableNode, "id") found. This is typically caused by an attempt to use a "raw" table object directly in a query without introducing it through a generator.
3 番目のテスト (オブジェクトを直接ではなくオブジェクト内で vals を使用) を実行すると、次のエラーが発生します。
recursive method bs needs result type
[error] val A = new Table[(Int, String)]("a") {
recursive value AToB needs type
[error] def as = AToB.filter(_.bId === id).flatMap(_.aFK)
エラーが発生する理由はわかっていますが、人々がどのようにエラーを回避したかを知りたいです。1 つの方法は、オブジェクトをクラス内に配置し、Slick を使用するたびにクラスをインスタンス化することです (しかし、これは奇妙に思えます)。もう 1 つは、パッケージの外部で Slick 関連のもの (または少なくとも多対多のもの) を使用しないことですが、これも悪いようです。
私の質問は、どうやってこれを回避するのですか? 適切な方法はありますか?