1

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

例如,有这样的功能

  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!

4

1 回答 1

0

您需要两个类型参数:

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

def execQ[C,T <: Table[C]](q: Query[T, C, scala.Seq]) = Await.result(db.run(q.result), Duration.Inf)
于 2015-08-04T19:38:09.877 回答