如何解决 "Connection => [A]" 与 Play-JDBC 的类型不匹配问题?
How to resolve type mismatch for "Connection => [A]" with Play-JDBC?
我正在构建一个相对简单的 REST API,我最终决定在 Play 框架内将 Anorm 用于我的数据库访问库。但是,我在使用基本列表查询时遇到了一些麻烦。我确信这是一个简单的修复,但我无法找到该问题的任何文档/解决方案。在其他示例中,代码或多或少地做了与最后调用/返回的 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
}
}
Anorm 结果分配给 val
,而不是返回,因此编译器会适当地推断返回 Unit
。
删除对 val result
的分配,因此 query.as(..)
将被返回(而不是本地分配)。
def list(): Seq[MyType] = {
db.withConnection { implicit conn =>
val query = SQL("SELECT * FROM mytype")
query.as(parser *)
}
}
Anorm查询可以简化为:
def list(): Seq[MyType] = db.withConnection { implicit conn =>
SQL"SELECT * FROM mytype".as(parser *)
}
我正在构建一个相对简单的 REST API,我最终决定在 Play 框架内将 Anorm 用于我的数据库访问库。但是,我在使用基本列表查询时遇到了一些麻烦。我确信这是一个简单的修复,但我无法找到该问题的任何文档/解决方案。在其他示例中,代码或多或少地做了与最后调用/返回的 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
}
}
Anorm 结果分配给 val
,而不是返回,因此编译器会适当地推断返回 Unit
。
删除对 val result
的分配,因此 query.as(..)
将被返回(而不是本地分配)。
def list(): Seq[MyType] = {
db.withConnection { implicit conn =>
val query = SQL("SELECT * FROM mytype")
query.as(parser *)
}
}
Anorm查询可以简化为:
def list(): Seq[MyType] = db.withConnection { implicit conn =>
SQL"SELECT * FROM mytype".as(parser *)
}