捕获唯一键异常Scala Slick

时间:2017-02-15 15:42:15

标签: scala slick

下面是我在插入数据库时​​使用的代码,但是当输入一个唯一的组名时,我在日志中得到一个唯一的密钥违规

override def create(groups: GroupEntity): Future[GroupEntity] = db.run{groupsTableQuery returning groupsTableQuery += groups}

2 个答案:

答案 0 :(得分:2)

使用recoverWith进行恢复。由于所有异常都是PSQLException类型,因此请检查异常消息中是否存在某些关键字来处理它。

val future = db.run { groupsTableQuery returning groupsTableQuery += groups }

future.recoverWith { 
 case ex: PSQLException =>
   val msg = ex.getMessage
   //check message for keywords for specific errors
   Future.successful(0)
 case ex => Future.failed(ex)
}

答案 1 :(得分:1)

感谢您的更新,但我找到了一种更简单的方法来解决问题,这在我的路线中得到了解决。以下是解决方案

val saved : Future[GroupEntity] = groupRepositoryImpl.create(group) 
onComplete(saved){
case Success(value) => complete(saved.map(_.toJson))
case Failure(ex)    => complete((InternalServerError, s"An error occurred: ${ex.getMessage}"))}

result =>发生错误:错误:重复键值违反唯一约束" groups_name_key_name"   细节:Key(groups_name)=(Test Shop)已经存在。