Scala объединяет пользовательские списки типов - PullRequest
0 голосов
/ 16 октября 2019

Я довольно новичок в мире Scala, и задача, над которой я сейчас работаю, - это перенести существующие запросы SQL в код. Я создал типы для исходных и целевых таблиц и заполнил их начальными значениями. Моя проблема начинается с преобразования операторов соединения.

Мои типы похожи на:

case class Table1(id: Int, name: String)
case class Table2(id: Int, description: String)
case class TargetType(id: Int, name: String, description: Int)

Я могу создавать списки для исходных объектов с помощью функции getAll (в основном выполняет запрос SQL и сопоставляет поля собъект).

В SQL следующий запрос легко дает желаемый результат:

SELECT tb1.id, tb1.name, tb2.description
FROM table1 AS tb1
       JOIN table2 AS tb2 ON tb1.id = tb2.id

Чтобы достичь того же результата, я написал следующую функцию:

 def calculateTrg: List[TargetType] = {
    val table1 = Table1.getAll
    val table2 = Table2.getAll

    val test = for {
      tb1 <- table1 
      tb2 <- table2 
      if tb1.id == tb2.id
    } yield TargetType(tb1.id, tb1.name, tb2. description)
}

Эта функция дает мне желаемый результат, но в настоящее время я работаю с действительно небольшим набором данных, и в соединении должно быть много других таблиц. Эта функция мне кажется перекрестным соединением в SQL с очень высокой сложностью, поэтому производительность меня очень волнует.

Я нашел Slick после моих исследований, но, поскольку это не личный проект, я не могу добавитьбиблиотеки к проекту без консультации с архитектором. Возможно ли сделать это в ядре Scala?

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