光滑投影 - 理解类型错误

时间:2015-12-03 13:19:16

标签: scala slick

我在下面有以下代码,尝试使用随播类设置相对简单的表映射。

case class Client(
      id: Integer,
      givenName: String,
      familyName: String,
      birthDate: Option[Date],
      nationality: Option[String]
)

class ClientsTable(tag: Tag) extends Table[Client](tag, "Client") {

  def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
  def givenName = column[String]("GIVEN_NAME", O.NotNull)
  def familyName = column[String]("FAMILY_NAME", O.NotNull)
  def birthDate = column[Date]("BIRTH_DATE", O.Nullable)
  def nationality = column[String]("NATIONALITY", O.Nullable)

  def * = (id, givenName, familyName, birthDate.?, nationality.?) <> ((Client.apply _).tupled, Client.unapply) 
}

我看到的错误出现在<>运营商上。

No matching Shape found. Slick does not know how to map the given types. 
Possible causes: T in Table[T] does not match your * projection. Or you use an unsupported type in a Query (e.g. scala List). 
Required level: scala.slick.lifted.FlatShapeLevel Source type: (scala.slick.lifted.Column[Int], scala.slick.lifted.Column[String], scala.slick.lifted.Column[String], scala.slick.lifted.Column[Option[java.sql.Date]], scala.slick.lifted.Column[Option[String]]) Unpacked type: (Integer, String, String, Option[java.sql.Date], Option[String]) Packed type: Any

现在,有一个popular answer that describes aspects of slick projections in detail,我已经向前和向后阅读,但我仍然在这里遗漏了一些东西。

我得知此投影函数正在尝试创建表的默认投影,以便以后使用DSL进行查询。我知道我在这里尝试做的是将一系列元组(真正从数据库返回的内容)转换为一系列Client个对象。我不完全理解<>及其后发生的事情的神奇之处,因此我对如何解决此错误感到有点困惑。

0 个答案:

没有答案