我已将具有the following method的Play / Scala项目导入Intellij,由于我不了解的原因,该项目出现了编译错误。任何想法在这里出什么问题吗?
我正在使用Java 8和Scala 2.11.6。
def fetchUser(id: Long): Option[UserRecord] =
Cache.getAs[UserRecord](id.toString).map { user =>
Some(user)
} getOrElse {
DB.withConnection { connection =>
val sql = DSL.using(connection, SQLDialect.POSTGRES_9_4)
val user = Option(sql.selectFrom[UserRecord](USER).where(USER.ID.equal(id)).fetchOne())
user.foreach { u =>
Cache.set(u.getId.toString, u)
}
user
}
}
withConnection
方法的调用出现编译错误。错误是:Cannot resolve overloaded method 'withConnection'
。
[当我尝试跳转到withConnection
方法的实现时,编译器在play.api.db.DB (2.4.3)
类中建议了两种可能的方法:
/**
* Execute a block of code, providing a JDBC connection. The connection is
* automatically released.
*
* @param name The datasource name.
* @param autocommit when `true`, sets this connection to auto-commit
* @param block Code block to execute.
*/
def withConnection[A](name: String = "default", autocommit: Boolean = true)(block: Connection => A)(implicit app: Application): A =
db.database(name).withConnection(autocommit)(block)
/**
* Execute a block of code, providing a JDBC connection. The connection and all created statements are
* automatically released.
*
* @param block Code block to execute.
*/
def withConnection[A](block: Connection => A)(implicit app: Application): A =
db.database("default").withConnection(block)
编译器应找到
def withConnection[A](block: Connection => A)(implicit app: Application): A =
db.database("default").withConnection(block)
因为匹配电话
DB.withConnection { ... }
与]相同>
DB.withConnection( block = { ... })
只要可以找到隐式
Application
。我不知道此隐式Application
的位置,但是由于它是从示例项目到书本的,所以我认为它存在于某处并且在过去有效。
您已经发布了三个与该项目的构建错误有关的问题。每次遇到此项目的构建错误时,请不要发布新的问题。那不是SO的重点。这些问题最适合于项目本身的维护者,即。作者在GitHub存储库的问题页面上。
现在看起来好像没有维护该项目。这是一个旧项目。您很可能会遇到由于版本过旧而导致问题中断的问题。考虑改问一个有关构建旧游戏项目的问题。