【发布时间】:2015-01-12 13:10:49
【问题描述】:
我使用 scala 2.11 和 slick 2.1.0 并编译了代码:
trait TSegmentClient { this: Profile =>
import profile.simple._
class SegmentClients(tag: Tag) extends Table[(Int, Long)](tag, "seg") {
def segmentId = column[Int]("segment_id")
def clientId = column[Long]("client_id")
def * = (segmentId, clientId)
}
}
segmentClients.insert(clientBehaviors.map(c => (1, c.clientId)))
它有效。
但我需要这样的案例类:
case class SegmentClient(segmentId: Int, clientId: Long)
trait TSegmentClient { this: Profile =>
import profile.simple._
class SegmentClients(tag: Tag) extends Table[SegmentClient](tag, "seg") {
def segmentId = column[Int]("segment_id")
def clientId = column[Long]("client_id")
def * = (segmentId, clientId) <> (SegmentClient.tupled, SegmentClient.unapply)
}
}
segmentClients.insert(clientBehaviors.map(c => (1, c.clientId)))
但它不能编译。
(值:models.coper.datamining.SegmentClient)(隐式会话: scala.slick.jdbc.JdbcBackend#SessionDef)Int 不能应用于 (scala.slick.lifted.Query[(scala.slick.lifted.Column[Int], scala.slick.lifted.Column[Long]),(Int, Long),Seq]) segmentClients.insert(clientBehaviors.map(c => (segmentId, c.clientId)))
我的代码有什么问题?
【问题讨论】:
-
def tuple = (segmentId, clientId); def * = 元组 (SegmentClient.tupled, SegmentClient.unapply);和 segmentClients.tuple.insert(...) ?
-
对不起,我不明白。在我的示例 2 中,我需要将
def * = (segmentId, clientId) <> (SegmentClient.tupled, SegmentClient.unapply)更改为tuple = (segmentId, clientId); def * = tuple <> (SegmentClient.tupled, SegmentClient.unapply),然后再更改segmentClients.tuple.insert(clientBehaviors.map(c => (1, c.clientId)))吗?编译器说,该值元组不是 scala.slick.lifted.TableQuery 的成员 -
我的错误,使用:segmentClients.map(_.tuple).insert(...)
-
太好了!它有效,谢谢!请添加您的答案,以便我标记它