尝试在 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
如果它是 a而不是 a则不需要结果类型val
。我听说过使用 aclass
但我找不到任何有关如何执行此操作的示例。
你如何声明多对多模型并从其他地方导入它们?
编辑:这是一个要点,说明我的意思: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.
如果您运行第三个测试(使用对象内部的 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)
我知道为什么会发生错误,但我想知道人们是如何绕过它们的。一种方法是将对象放在一个类中,并在每次你想使用 Slick 时实例化一个类(但这似乎......很奇怪)。另一个是永远不要在包之外使用与 Slick 相关的东西(或者至少是多对多的东西),但这似乎也很糟糕。
我的问题仍然是,你们如何解决这个问题?有正确的方法吗?