【问题标题】:Getting error while creating schema in mysql using slick使用 slick 在 mysql 中创建模式时出错
【发布时间】:2020-12-13 05:52:07
【问题描述】:

错误:

 value <> is not a member of (slick.lifted.Rep[String], slick.lifted.Rep[String], slick.lifted.Rep[String])    
 def * : ProvenShape[Employee] = (id, name, dept) <> (Employee.tupled, Employee.unapply)

我的 build.sbt 看起来像这样:

name := "AkkaHttpDemo"
version := "0.1"
scalaVersion := "2.13.3"
lazy val root = project in file(".")
libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-actor" % "2.6.8"  ,
  "com.typesafe.akka" %% "akka-stream" % "2.6.8",
  "com.typesafe.akka" %% "akka-http" % "10.2.0",
  "com.typesafe.slick" %% "slick" % "3.3.2",
  "com.typesafe.slick" %% "slick-hikaricp" % "3.3.2",
  "org.slf4j" % "slf4j-nop" % "1.6.6" % Test,
  "mysql" % "mysql-connector-java" % "8.0.21"
)

表架构如下所示:

package services
import akka.stream.scaladsl._
import slick.jdbc.MySQLProfile._
import slick.ast.ScalaBaseType.stringType
import slick.lifted._
import slick.util._
trait EmployeeStore {
  class EmployeeStoreImpl(tag: Tag)  extends Table[Employee](tag, _schemaName = Some("MYSCHEMA"),"EMPL") {
    def id= column[String]("empid")
    def name = column[String]("name")
    def dept = column[String]("dept")

    def * : ProvenShape[Employee] = (id, name, dept) <> (Employee.tupled, Employee.unapply)
  }
  val dict = TableQuery[EmployeeStoreImpl]
}

注意*:当我尝试给出下面的代码时也会得到错误

dict.schema.create 

无法解析符号架构

【问题讨论】:

  • 我强烈建议从模式生成 Scala 代码,而不是相反。 scala-slick.org/doc/3.3.0/code-generation.html 。原因是在某些时候您将不得不为 e 编写数据库迁移。 G。 Flyway,并且不可能使用 slick 生成这些。另一方面,在测试数据库上运行所有迁移,然后从生成的模式生成流畅的代码是微不足道的。相信我,我去过那里,我希望有人在那天告诉我。

标签: mysql scala slick akka-http


【解决方案1】:

您需要导入 Slick API:

import slick.jdbc.MySQLProfile.api._

你也可以用更方便的替换&lt;&gt;

def *  = (id, name, dept).mapTo[Employee]

您可能不需要 slick.astslick.liftedslick.util 导入,但我感谢您在示例中包含完整的导入列表。

【讨论】:

  • 我试过了,但是你能帮我解决我在使用 mapTo 后遇到的这个错误
  • 类型不匹配;发现:Employee.type 必需:scala.reflect.ClassTag[?] def * = (id, name).mapTo(Employee)
  • 嗨@varsha - 请注意mapTo 采用类型参数。在方括号中:mapTo[Employee] 不是mapTo(Employee)。但这只是用&lt;&gt; 编写你所拥有的更好的方式。
猜你喜欢
  • 2013-05-10
  • 2019-05-10
  • 2018-09-02
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 2016-06-14
相关资源
最近更新 更多