Slick 3.0.0重用查询代码

时间:2015-07-24 10:24:06

标签: scala slick slick-2.0 slick-3.0

我想在我的应用中重用代码,

例如,

具有这样的功能

  def getA1(idUser: Option[Long]) = {
    val q = A1Q.filter(_.idUser === idUser.get)
    Await.result(db.run(q.result), Duration.Inf)
  }

  def getA2[T](idUser: Option[Long]) = {
    val q = A2Q.filter(_.idUser === idUser.get)
    Await.result(db.run(q.result), Duration.Inf)
  }

  def getAn(idUser: Option[Long]) = {
    val q = AnQ.filter(_.idUser === idUser.get)
    Await.result(db.run(q.result), Duration.Inf)
  }

A1Q的类型为TableQuery

和' q'类型Query[TA1Q, TA1Q#TableElementType, scala.Seq] 试图使用泛型来解决当前问题,比如这个

 def execQ[T](q: Query[T, T, scala.Seq]) = Await.result(db.run(q.result), Duration.Inf)

但类型错误,

我如何通用Query[TA1Q, TA1Q#TableElementType, scala.Seq]?以正确的方式准备一些像

这样的分离函数
  def execQ[T](q: Query[T, T, scala.Seq]) = Await.result(db.run(q.result), Duration.Inf)

BR!

1 个答案:

答案 0 :(得分:0)

您需要两个类型参数:

第一个C,它是您的实体,因此是您查询的返回类型。 第二个T是你的实体表,因此扩展了表[C]。

def execQ[C,T <: Table[C]](q: Query[T, C, scala.Seq]) = Await.result(db.run(q.result), Duration.Inf)