什么可能导致找不到Squeryl表对象?

时间:2014-08-21 15:42:15

标签: scala sbt squeryl

我在尝试运行Squeryl示例代码时遇到编译时错误。以下代码基于使用Squeryl连接到SQLServer的My Jourures in Coding blog post

import org.squeryl.adapters.MSSQLServer
import org.squeryl.{ SessionFactory, Session}
import com.company.model.Consumer

class SandBox {
  def tester() = {
    val databaseConnectionUrl = "jdbc:jtds:sqlserver://myservername;DatabaseName=mydatabasename"
    val databaseUsername = "userName"
    val databasePassword = "password"

    Class.forName("net.sourceforge.jtds.jdbc.Driver")

    SessionFactory.concreteFactory = Some(()=>
      Session.create(
        java.sql.DriverManager.getConnection(databaseConnectionUrl, databaseUsername, databasePassword),
        new MSSQLServer))

    val consumers = table[Consumer]("Consumer")
  }
}

我相信我已正确配置build.sbt文件以导入Squeryl& JTDS库。在添加依赖项后运行SBT时,似乎需要下载库。

libraryDependencies ++= List (
  "org.squeryl" %% "squeryl" % "0.9.5-6",
  "net.sourceforge.jtds" % "jtds" % "1.2.4",
  Company.teamcityDepend("company-services-libs"),
  Company.teamcityDepend("ssolibrary")
) ::: Company.teamcityConfDepend("company-services-common", "test,gatling")

我确信至少有一些依赖项已成功安装。我的基础是SessionFactory代码块成功编译的事实。它只是尝试从Consumer类到Consumer SQLServer表设置映射的行。

val consumers = table[Consumer]("Consumer")

此行导致抛出编译时错误。编译无法找到表对象。

[info] Compiling 8 Scala sources to /Users/pbeacom/Company/integration/target/scala-2.10/classes...
[error] /Users/pbeacom/Company/integration/src/main/scala/com/company/code/SandBox.scala:25: not found: value table 
[error]     val consumers = table[Consumer]("Consumer")

正在使用的Scala版本是2.10,如果表格行被注释,则代码编译成功。使用表对象来完成数据模型映射几乎无处不在我在线研究的Squeryl示例中,似乎没有其他人遇到过类似的问题。

1 个答案:

答案 0 :(得分:1)

发布此内容后不久,我终于发现了问题。我没有充分意识到Scala中大量使用mixins。我没有扩展Schema类。这就是为什么在SandBox类的范围内未知表的原因。我能够通过以下类定义解决问题:

class SandBox extends Schema {
  def tester() = {
  ...