我正在构建一个相对简单的REST API,最后我决定使用Anorm,将其用于Play框架中的数据库访问库。但是,我在使基本列表查询正常工作时遇到了一些麻烦。我确信这是一个简单的修复程序,但是我无法找到有关此问题的任何文档/解决方案。在其他示例中,代码或多或少地在执行query.as(parser *)
函数最后一次调用/返回的相同操作。
问题是我的功能是(根据IntelliJ)查找Connection => Unit
类型而不是所需的Connection => Seq[MyType]
类型。这是我的代码:
case class MyType(id: Int, name: String, createdAt: LocalDateTime, updatedAt: LocalDateTime)
class MyTypeRepository @Inject()(
dbApi: DBApi
)(implicit ec: DBExecutionContext) {
private val db = dbApi.database("default")
private val parser: RowParser[MyType] = {
for {
id <- int("mytpe.id")
name <- str("mytype.name")
createdAt <- get[LocalDateTime]("mytype.created_at")
updatedAt <- get[LocalDateTime]("mytype.updated_at")
} yield (MyType(id, name, createdAt, updatedAt))
}
def list(): Seq[MyType] = {
db.withConnection { implicit conn =>
val query = SQL("SELECT * FROM mytype")
val result = query.as(parser *)
} // Type mismatch error is showing up here
}
}
答案 0 :(得分:1)
将Anorm结果分配给val
而不是返回,因此编译器适当地推断出返回了Unit
。
删除对val result
的分配,因此将返回query.as(..)
(而不是本地分配)。
def list(): Seq[MyType] = {
db.withConnection { implicit conn =>
val query = SQL("SELECT * FROM mytype")
query.as(parser *)
}
}
正常查询可以简化为:
def list(): Seq[MyType] = db.withConnection { implicit conn =>
SQL"SELECT * FROM mytype".as(parser *)
}