升级 Play 到 2.4,Slick 到 3.1.1,值 withTransaction 不是 play.api.db.slick.Database 的成员
Posted
技术标签:
【中文标题】升级 Play 到 2.4,Slick 到 3.1.1,值 withTransaction 不是 play.api.db.slick.Database 的成员【英文标题】:Upgrading Play to 2.4, Slick to 3.1.1, value withTransaction is not a member of play.api.db.slick.Database 【发布时间】:2018-10-22 19:46:09 【问题描述】:我正在尝试将我的应用程序从使用 Play 2.3.x 升级到 Play 2.4.x(将在 2.6 结束,但一步一步)和 Slick 从 2.1.0 升级到 3.1.1。
我已尽力关注Play's migration guide、Play Slick migration guide 和Slick upgrade guides。
我现在遇到的问题之一是以下行:
val db: slick.Database = play.api.db.slick.DB
这似乎不再是执行此操作的正确方法 b/c 我收到如下错误:
value withTransaction is not a member of play.api.db.slick.Database
从 Play slick 迁移指南看来,我应该将其修改为类似
val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
但是如果我没有正确的导入或什么,我会收到如下错误:
object driver is not a member of package play.api.db.slick
not found: value DatabaseConfigProvider
有关更多上下文,这是我正在使用的文件之一,它会出现此错误:https://github.com/ProjectSidewalk/SidewalkWebpage/blob/2c48dfa2e34c691e40568bfa9d50493aa3fe9971/app/models/attribute/GlobalAttributeTable.scala
有人知道我在这些迁移指南中遗漏了什么吗?
提前谢谢你!
【问题讨论】:
您正在从 slick 2.1.0 迁移到 3.1.1。他们完全改变了事务管理。你可以在这里阅读它slick.lightbend.com/doc/3.1.1/…。我认为您应该先查看迁移指南到 3.0.0 版本 - slick.lightbend.com/doc/3.0.0/upgrade.html 谢谢!是的,我也尝试遵循 2.1.0 到 3.0.0 指南。但是您链接到的关于 DB I/O 操作的部分完全超出了我的想象。我正在查看def getAllX: List[X] = db.withSession implicit session => tableOfX.list
之类的代码,而从升级指南中我看不到应该如何迁移这样的代码。一旦你点击 3.0.0 文档,withSession
就再也不会被提及了。我能找到的最好的是here,但这也不能完全解释。
好的,这是另一篇我觉得很有帮助的博客文章,它提供了有关此特定语法迁移的更多信息:anadea.info/blog/comparative-analysis-of-slick-2-and-slick-3 将在我尝试后报告。
【参考方案1】:
原来我遗漏了一些东西:
-
我没有意识到我需要使用更新版本的 play-slick 库(我仍然使用 0.8.0 而不是 1.1.1)。
我需要添加导入
import play.api.Play
而不是我已经拥有的导入 import play.api.Play.current
。
我有一个导入 import play.api.db.slick
导致“对象驱动程序不是包 play.api.db.slick 的成员”错误在此导入行:import slick.driver.JdbcProfile
。我刚刚删除了之前不需要的导入。
正如@Valerii 所说,withTransaction
已在 Slick 3.1 中删除,并且替换记录在上述 cmets 的各个链接中。
【讨论】:
以上是关于升级 Play 到 2.4,Slick 到 3.1.1,值 withTransaction 不是 play.api.db.slick.Database 的成员的主要内容,如果未能解决你的问题,请参考以下文章
在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?