【问题标题】:Slick silently fails to save and doesn't' throw an exceptionSlick 默默地无法保存并且不会抛出异常
【发布时间】:2016-04-07 09:27:15
【问题描述】:

我刚刚遇到了一个非常可怕的情况。我的表定义引用了一个错误的列,我注意到插入没有插入但没有关于该问题的错误/异常。它只是“默默地”失败了。

这是正常的狡猾行为吗?

所以我的表定义是这样的:

  def expiredAt = column[Timestamp]["created_at"]
  def createdAt = column[Timestamp]["created_at"]

如您所见,两者引用的列是同一列“created_at”。当我将 expiredAt 列更改为“expired_at”时,一切正常。

但对我来说真正的问题是根本没有抛出异常。

这是正常的狡猾行为吗?幕后发生了什么? updateRows 不返回 0 吗?

我的保存方法如下:

(users returning users.map(_.id)) += user 

我正在使用 slick3。

【问题讨论】:

  • 不知道 Slick,但我见过 bonecp(默认为 play
  • @AlvaroCarrasco 我目前正在使用 bonecp,播放 2.3.10。
  • 是的,有同样的问题,浪费了几个小时试图找到问题。当我切换到 HikariCP 时停止发生。如果可以的话,升级到 2.4(默认使用 hikaricp)。如果您卡在 2.3 上,则必须使用 hikaricp 播放插件。
  • @AlvaroCarrasco 欣赏它,为什么不把它放在答案而不是评论中?
  • 您是否正在检查db.run 返回的Future 的结果?除非您在某些时候取消引用 Future(通过 mapAwait 或其他方式),否则异常将静默在其中。

标签: scala slick


【解决方案1】:

遇到了同样的问题,用recover解决了:

val query = (users returning earningsForms.map(_.id) += user
db.run(query).recover{ ex: Throwable => Logger.error("Error occured when inserting user", ex)}

【讨论】:

  • 但我什至没有看到异常。你的意思是除非我添加 .recover 否则异常被吞没?
  • 异常没有被吞下;它被记录在db.run 返回的Future 中。您需要检索Future 的结果以判断成功或失败。
【解决方案2】:

不了解 Slick,但我见过 bonecp(默认为 play

我遇到了同样的问题,浪费了数小时试图找到问题。当我切换到 HikariCP 时停止发生。如果可以的话,升级到 2.4(默认使用 hikaricp)。如果您卡在 2.3 上,则必须使用 hikaricp 播放插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 2018-06-28
    • 2015-07-21
    相关资源
    最近更新 更多