我在下面有以下代码,尝试使用随播类设置相对简单的表映射。
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
个对象。我不完全理解<>
及其后发生的事情的神奇之处,因此我对如何解决此错误感到有点困惑。