Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala上的枚举与Slick之间的映射_Scala_Enums_Slick_Slick 3.0 - Fatal编程技术网

Scala上的枚举与Slick之间的映射

Scala上的枚举与Slick之间的映射,scala,enums,slick,slick-3.0,Scala,Enums,Slick,Slick 3.0,我是玩Scala和Slick的新手。我试图将Scala上的枚举映射到Slick上的String/Int。我写了下面的代码,但我得到了一个错误。你能告诉我怎么解决这个问题吗 我正在使用Scala 2.11.6、Slick 3.1.0、Play 2.4.4、Play Slick 1.1.1 package models import javax.inject.{Inject, Singleton} import play.api.db.slick.DatabaseConfigProvider i

我是玩Scala和Slick的新手。我试图将Scala上的枚举映射到Slick上的String/Int。我写了下面的代码,但我得到了一个错误。你能告诉我怎么解决这个问题吗

我正在使用Scala 2.11.6、Slick 3.1.0、Play 2.4.4、Play Slick 1.1.1

package models

import javax.inject.{Inject, Singleton}

import play.api.db.slick.DatabaseConfigProvider
import slick.driver.JdbcProfile

import scala.concurrent.ExecutionContext

class Color extends Enumeration {
  type Color = Value
  val Blue = Value("Blue")
  val Red = Value("Red")
  val Green = Value("Green")
}
object Color extends Color

case class Sample(name:String, id:Int, c:Color)

@Singleton
class ColorDao @Inject()(dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) {
  val dbConfig = dbConfigProvider.get[JdbcProfile]
  import dbConfig._
  import driver.api._

  class SampleTable(tag: Tag) extends Table[Sample](tag, "Sample") {
    def name  = column[String]("NAME")
    def id    = column[Int]("ID")
    def color = column[Color]("COLOR")
    def * = (name, id, color) <> (Sample.tupled, Sample.unapply)
  }

  def enumStringMapper(enum: Enumeration) = MappedColumnType.base[enum.Value, String](
    e => e.toString,
    s => enum.withName(s)
  )
  implicit val colorMapper = enumStringMapper(Color)
}
请参阅下面的链接了解完整的代码

--

用此代码修复

package models

import javax.inject.{Inject, Singleton}

import models.Bar.Bar
import models.Color.Color
import play.api.db.slick.DatabaseConfigProvider
import slick.driver.JdbcProfile

import scala.concurrent.ExecutionContext

object Color extends Enumeration {
  type Color = Value
  val Blue = Value("Blue")
  val Red = Value("Red")
  val Green = Value("Green")
}

case class Sample(name:String, id:Int, c:Color)

@Singleton
class ColorDao @Inject()(dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) {
  val dbConfig = dbConfigProvider.get[JdbcProfile]
  import dbConfig._
  import driver.api._

  class SampleTable(tag: Tag) extends Table[Sample](tag, "Sample") {
    def name  = column[String]("NAME")
    def id    = column[Int]("ID")
    def color = column[Color]("COLOR")
    def * = (name, id, color) <> (Sample.tupled, Sample.unapply)
  }
  implicit val colorMapper = MappedColumnType.base[Color, String](
    e => e.toString,
    s => Color.withName(s)
  )
}
包模型
import javax.inject.{inject,Singleton}
导入模型.Bar.Bar
导入models.Color.Color
导入play.api.db.slick.DatabaseConfigProvider
导入slick.driver.jdbc配置文件
导入scala.concurrent.ExecutionContext
对象颜色扩展了枚举{
类型颜色=值
val Blue=值(“蓝色”)
val Red=值(“红色”)
val绿色=值(“绿色”)
}
案例类示例(名称:String,id:Int,c:Color)
@独生子女
类ColorDao@Inject()(dbConfigProvider:DatabaseConfigProvider)(隐式ec:ExecutionContext){
val dbConfig=dbConfigProvider.get[JdbcProfile]
导入dbConfig_
导入driver.api_
类SampleTable(tag:tag)扩展表[Sample](tag,“Sample”){
def名称=列[字符串](“名称”)
def id=列[Int](“id”)
def color=列[color](“color”)
def*=(名称、id、颜色)(Sample.tuple、Sample.unapply)
}
隐式val colorMapper=MappedColumnType.base[颜色,字符串](
e=>e.toString,
s=>Color.withName(s)
)
}
以下是修复方法:

包模型
import javax.inject.{inject,Singleton}
导入模型.Bar.Bar
导入models.Color.Color
导入play.api.db.slick.DatabaseConfigProvider
导入slick.driver.jdbc配置文件
导入scala.concurrent.ExecutionContext
对象颜色扩展了枚举{
类型颜色=值
val Blue=值(“蓝色”)
val Red=值(“红色”)
val绿色=值(“绿色”)
}
案例类示例(名称:String,id:Int,c:Color)
@独生子女
类ColorDao@Inject()(dbConfigProvider:DatabaseConfigProvider)(隐式ec:ExecutionContext){
val dbConfig=dbConfigProvider.get[JdbcProfile]
导入dbConfig_
导入driver.api_
类SampleTable(tag:tag)扩展表[Sample](tag,“Sample”){
def名称=列[字符串](“名称”)
def id=列[Int](“id”)
def color=列[color](“color”)
def*=(名称、id、颜色)(Sample.tuple、Sample.unapply)
}
隐式val colorMapper=MappedColumnType.base[颜色,字符串](
e=>e.toString,
s=>Color.withName(s)
)
}

fix使用第二个代码。如果您回答问题并接受它,则更清楚:)我认为@stsatlantis的意思是将修复作为实际答案发布。。。完成[此处]()
package models

import javax.inject.{Inject, Singleton}

import models.Bar.Bar
import models.Color.Color
import play.api.db.slick.DatabaseConfigProvider
import slick.driver.JdbcProfile

import scala.concurrent.ExecutionContext

object Color extends Enumeration {
  type Color = Value
  val Blue = Value("Blue")
  val Red = Value("Red")
  val Green = Value("Green")
}

case class Sample(name:String, id:Int, c:Color)

@Singleton
class ColorDao @Inject()(dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) {
  val dbConfig = dbConfigProvider.get[JdbcProfile]
  import dbConfig._
  import driver.api._

  class SampleTable(tag: Tag) extends Table[Sample](tag, "Sample") {
    def name  = column[String]("NAME")
    def id    = column[Int]("ID")
    def color = column[Color]("COLOR")
    def * = (name, id, color) <> (Sample.tupled, Sample.unapply)
  }
  implicit val colorMapper = MappedColumnType.base[Color, String](
    e => e.toString,
    s => Color.withName(s)
  )
}