定义
对于 Scala >= 2.10.4-RC2(也由 Slick 2.0.0 代码生成器生成):
import scala.slick.collection.heterogenous._
import syntax._
class Joiners(tag: Tag) extends Table[
Int :: Option[String] :: Option[String] :: HNil
](tag, "joiner") {
...
def * = id :: name :: contact :: HNil
}
上述情况导致 Scala 2.10.3 / 2.10.4-RC1 中的编译时间呈指数级增长。由于编译时间极长,对于超过 26 列不可行。
Scala
import scala.slick.collection.heterogenous._
import syntax._
class Joiners(tag: Tag) extends Table[
HCons[Int, HCons[Option[String], HCons[Option[String], HNil]]]
](tag, "joiner") {
...
def * = id :: name :: contact :: HNil
}
我们用 30-40 根色谱柱进行测试,没有出现任何问题。
目前 Scala 2.10.4-RC2 中似乎仍然存在偶尔出现编译错误的问题,看起来会在即将发布的 2.10.4-RC3 中得到修复。看https://issues.scala-lang.org/browse/SI-8146 https://issues.scala-lang.org/browse/SI-8146
用法示例
Joiners.run.map( r => r(2) ) // Gets column contact. It's typesafe. .apply is a macro. Only works for literals not for variables as positions.
使用 22,而不映射到案例类(Scala 2.10 中的最大字段限制为 22)。
另外:不要使用 O.Nullable。使用column[Option[String]]
反而。它推断可为空性。