Код запроса повторного использования Slick 3.0.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!


person initmax    schedule 24.07.2015    source источник


Ответы (1)


Вам нужны два параметра типа:

Первый C, который является вашей сущностью и, следовательно, типом возврата вашего запроса. И второй T, который является вашей таблицей сущностей и, следовательно, расширяет Table[C].

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