我在scalatra中有一个简单的CRUD项目,而作为ORM,我使用了squeryl。我想创建一些彼此相关的表。在这一行:
val questionToAnswer = CustomTypesMode.oneToManyRelation(questions,answers) via ((q,a) => q.id === a.question)
我有编译错误:
无法解析符号===
我的依赖是:
val scalatraVersion = "2.4.0-RC2-2"
libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % scalatraVersion,
"org.eclipse.jetty" % "jetty-webapp" % "9.3.0.M2",
"org.scalaquery" % "scalaquery_2.9.1" % "0.10.0-M1",
"org.squeryl" % "squeryl_2.8.0" % "0.9.5-RC2",
"joda-time" % "joda-time" % "2.9.1",
"postgresql" % "postgresql" % "9.1-901.jdbc4",
"org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016")
我的IDE是intellij Idea 14.1.5。 我的架构是:
object AppSchema extends Schema{
val questions = table[Question]
val answers = table[Answer]
val questionToAnswer = CustomTypesMode.oneToManyRelation(questions,answers) via ((q,a) => q.id === a.question)
}
case class Question (
id:Long,
title:String,
content: String,
rank: Int,
createdDate: DateTime,
updatedDate: Option[DateTime]
){
lazy val answers = AppSchema.questionToAnswer.left(this)
}
case class Answer(
id: Long,
content: String,
rank: Int,
createdDate: DateTime,
updatedDate: Option[DateTime]
){
lazy val question = AppSchema.questionToAnswer.right(this)
}
我做错了什么?为什么它无法解析符号" ==="
答案 0 :(得分:3)
您使用的是什么版本的scala?
"org.scalaquery" % "scalaquery_2.9.1" % "0.10.0-M1",
"org.squeryl" % "squeryl_2.8.0" % "0.9.5-RC2",
已经使用不同版本的scala编译了两个库。这可能导致编译期间出现意外行为。您应该坚持使用单个scala版本编译的二进制文件。
答案 1 :(得分:3)
我同意保持一致的Scala版本,我还想指出===运算符是通过隐式转换引入的。要在范围内进行隐式转换,您需要在使用它的地方导入org.squeryl.PrimitiveTypeMode._。