Слик использует объекты, определенные в моих таблицах, чтобы заполнить мои SQL ответы на запросы - PullRequest
0 голосов
/ 05 февраля 2020

Предполагая, что у меня есть Person класс case и PersonTable, определенный в Slick, мне было интересно, возможно ли сделать что-то подобное скомпилированным и работающим:

case class Person(id: Long, ....)

class PersonTable(tag: Tag) extends Table[Person](tag, "PERSON") {
  def serverId = column[Long]("ID")
  ...

  def * = (id, ...).mapTo[Person]
}

sql"select person.* from PERSON JOIN USER ON USER.ID = PERSON.ID".as[List[Person]]

Я мог видеть это

sql"select person.* from PERSON JOIN USER ON USER.ID = PERSON.ID".as[(a,b,c,...,z)]

, по крайней мере, компилируется, но я бы хотел, чтобы это работало с моими уже определенными объектами, а также со списками.

Спасибо

1 Ответ

1 голос
/ 06 февраля 2020

Для большинства запросов Slick-запрос DSL гораздо приятнее / проще, определенно сделайте это сначала! Но для сложных запросов я согласен, что иногда старый добрый sql работает хорошо. Иногда становится действительно сложно определить DSL, или, что еще хуже, в некоторых случаях получается очень неэффективно SQL. (хотя это стало лучше)

AFAIK, вам все еще нужно несколько раздражающее отображение GetResult из кортежей результатов в классы дел для работы .as[]. Если вы не добавите .headOption, появится список.

Примерно так:

implicit val getPersonResult = GetResult(r => Target(r.<<, r.<<, r.<<, ... ))

db.run(sql"select person.* from PERSON JOIN USER ON USER.ID = PERSON.ID".as[Person])
   .map(_.toList)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...