嘗試在Slick中執行多對多關係時,我一直在收到錯誤。這test顯示如何在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
裏面的一個object
就是答案。但現在我得到這個錯誤:
recursive method bs needs result type
,如果它是一個object
而不是val
它並不需要一個結果類型。我聽說過使用class
,但我找不到如何執行此操作的任何示例。
如何聲明多對多模型並從其他地方導入它們?
編輯: 這裏展示我的意思是一個要點:https://gist.github.com/pjrt/5332311
如果您運行的第一個測試,它會通過,沒有問題。
如果你運行的第二次測試,下面的錯誤被拋出:
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.
如果您運行的第三個測試(使用對象,而不是直接對象的內部丘壑),你得到這個錯誤:
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)
我知道錯誤發生的原因,但我想知道人們是如何繞過它們的。一種方法是將對象放入類中,並在每次使用Slick時實例化一個類(但這看起來很奇怪)。另一種方法是從不使用與包之外的Slick相關的東西(或者至少是多對多的東西),但這看起來也很糟糕。
我的問題仍然是,你們如何解決這個問題?有沒有合適的方法?
你不能分享你的表的代碼嗎? – pedrofurla 2013-04-07 17:01:01
新增了一個要點來展示我的意思。 – Nacht 2013-04-07 20:54:07
如果您創建了一個Slick測試用例並提交了一個github拉取請求,我們可以走得更近。請將它放在https://github.com/slick/slick/tree/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests或https://github.com/slick/ slick/tree/master/slick-testkit/src/test/scala/scala/slick/test/lifted – cvogt 2013-04-10 16:30:49