0

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 

であり、 ではない場合、結果の型は必要ありませobjectval。の使用について聞いた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 関連のもの (または少なくとも多対多のもの) を使用しないことですが、これも悪いようです。

私の質問は、どうやってこれを回避するのですか? 適切な方法はありますか?

4

1 に答える 1