升级 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 2.4 中的 Slick 3.0 事务

Play 2.4 Slick 3.0 - 删除表中的所有行

如何使用Slick和Play在测试中应用手动演变! 2.4

在 Play framework 2.4 中使用 Slick 3 在哪里初始化数据库?

Play Ebean 从 2.4 升级到 2.5 后不生成 Id

play-slick升级后运行激活器失败