Scala:如何使Slick存储自定义类对象?

时间:2013-09-20 22:24:46

标签: class scala orm slick

我想用我定义的类存储一些东西:

case class Contact(var name: String, var phone: Option[String],  val email: String)

object Contacts extends Table[Contact]("CONTACTS") {
  def email = column[String]("email", O.PrimaryKey)
  def name = column[String]("name")
  def phone = column[String]("phone", O.Nullable)

  def * =  name ~ phone ~ email <> (Contact.apply _, Contact.unapply _)
}

错误是:

[error]  cannot be applied to ((String, Option[String], String) =>
models.Contact, models.Contact => Option[(String, Option[String],
String)]) [error]   def * =  name ~ phone ~ email <> (Contact.apply _,
Contact.unapply _)

我理解,如果我将Table[Contact]更改为Table[(String, String, String)],那就可以了。但我只想将Contact作为一个表,而Contact类可以为另一个类Contact提供服务,可以为User类提供服务。

我该如何实现?

2 个答案:

答案 0 :(得分:1)

编译错误只是电话字段(Option[String])与电话列(String)之间类型不匹配的结果。

正如@cvogt建议的那样,您可以使用Option为电话栏修复不匹配问题:

def phone = column[Option[String]]("phone")

或者,您可以更改*方法,以便它可以在案例类的Option字段和表格的Nullable列之间正确转换:

def * =  name ~ phone.? ~ email <> (Contact, Contact.unapply _)

答案 1 :(得分:1)

使用Option类型而不是O.Nullable for phone:

def phone = column[Option[String]]("phone")