Вы можете использовать tsql
(Type-Checked SQL Statements):
tsql"""select c.name, s.name
from coffees c, suppliers s
where c.price < $price and s.id = c.sup_id"""
это вернет DBIO[Seq[(String, String)]]
(в зависимости от типов столбцов).
производит DBIOAction
правильного типа без необходимости вызова .as
Примечание: Я нашел его немного Flakey (к точке бытия непригодным для использования) с типами опционов, так что будьте осторожны если ваши столбцы могут быть null
(с null: String
).
Это требует немного разводку, вам нужно @StaticDatabaseConfig
(например, на вашем DAO), так как проверяются эти типы, с базой данных, во время компиляции:
# annotate the object
@StaticDatabaseConfig("file:src/main/resources/application.conf#tsql")
...
val dc = DatabaseConfig.forAnnotation[JdbcProfile]
import dc.driver.api._
val db = dc.db
# to pull out a Future[Seq[String, String]]
# use db.run(tsql"...")
# to pull out a Future[Option[(String, String)]]
# use db.run(tsql"...".headOption)
# etc.
но как я могу получить метаданные набора результатов? – ps0604