捕获唯一键异常 Scala Slick
Catch Unique Key Exception Scala Slick
下面是我在插入数据库时使用的代码,但是当输入唯一组的名称时,我在日志中发现了唯一密钥违规
override def create(groups: GroupEntity): Future[GroupEntity] = db.run{groupsTableQuery returning groupsTableQuery += groups}
使用 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)
}
感谢您的更新,但我找到了解决问题的更简单方法,并且在我的路线中已解决。下面是解决方案
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}"))}
结果 => 发生错误:错误:重复键值违反唯一约束 "groups_name_key_name "
详细信息:Key (groups_name)=(Test Shop) 已经存在。
下面是我在插入数据库时使用的代码,但是当输入唯一组的名称时,我在日志中发现了唯一密钥违规
override def create(groups: GroupEntity): Future[GroupEntity] = db.run{groupsTableQuery returning groupsTableQuery += groups}
使用 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)
}
感谢您的更新,但我找到了解决问题的更简单方法,并且在我的路线中已解决。下面是解决方案
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}"))}
结果 => 发生错误:错误:重复键值违反唯一约束 "groups_name_key_name " 详细信息:Key (groups_name)=(Test Shop) 已经存在。