Scala上的枚举与Slick之间的映射
我是玩Scala和Slick的新手。我试图将Scala上的枚举映射到Slick上的String/Int。我写了下面的代码,但我得到了一个错误。你能告诉我怎么解决这个问题吗 我正在使用Scala 2.11.6、Slick 3.1.0、Play 2.4.4、Play Slick 1.1.1Scala上的枚举与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
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)
)
}