Я довольно новичок в мире 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?