found : (Int, String, Option[java.lang.String])
required: (Int, String, Option[java.lang.String])
相关代码:
object M extends Table[(Int, String, Option[String])]("table") {
def msaid = column[Int]("msaid", O NotNull)
def name = column[String]("name", O DBType "varchar(255)")
def shape = column[Option[String]]("shape")
def * = msaid ~ name ~ shape
type T = (Int, String, Option[java.lang.String])
def apply(msa: T) = 1
def q() = db withSession { s: Session => (for (r <- M) yield M(*)).list()(s) }
^
^
...
我也试过
type T = (Int, String, Option[String])
最终目标是我希望所有选定的列都转换为具有命名访问器的Object,而不是元组。
Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).
更新:
这是问题的Gist(从上面的代码略微简化,并通过仅使用Int来消除任何String / java.lang.String“混淆”。)
答案 0 :(得分:3)
错误消息并没有用来告诉你哪个是TupleN,尽管我认为这在某些方面有所改进。不匹配是在元组和n args之间。或者不是。
fix在2.9.2中。我注意到你的.sbt使用2.9.1 scalaquery,以防万一。 scala-tools.org是不是已经过时了?对不起半帮。
作为非用户,看起来Projection2不是您寻求的元组,尽管是产品:
class Projection2 [T1, T2] extends (Column[T1], Column[T2]) with Projection[(T1, T2)]
REPLing:
scala> M.column[Int]("id") ~ M.column[Int]("n")
res1: (Int, Int) = Projection2
scala> M(res1)
<console>:23: error: type mismatch;
found : (Int, Int)
required: (Int, Int)
M(res1)
^
scala> M.apply
def apply(v: (Int, Int)): Int
scala> M.apply((1,2))
res3: Int = 1