Как управлять исключениями, связанными с БД, в игре! 2.0/Scala с использованием Anorm

В настоящее время я играю с Play 2.0 (Scala ). Я должен признать, что это очень весело. У меня есть вопрос, связанный с исключениями операций с базой данных .

Допустим, у меня есть Car в качестве доменного класса и у меня есть ограничение целостности для одного из полей,скажем модель , чтобы в БД у меня не могло быть двух (2 )строк с одинаковым названием модели:

case class Car(id: Pk[Long], name: String, model: String)

Я пытаюсь вставить запись в БД вот так:

def create(car: Car): Option[Long] = {
    DB.withConnection { implicit connection =>
      try {
          SQL("insert into cars (name, model) values ({name},{model}").on("name" -> car.name, "model" -> car.model).executeInsert()
      } catch {
          case e: Exception => {
          Logger.debug(e.getMessage())
          None
      } 
    }
}

если я не поймаю исключение, как в предыдущем коде, то, когда я вызову этот метод из моего контроллера с моделью, имеющей значение, уже существующее в базе данных, у меня возникнет следующее исключение:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'Enzo' for key 'model'

Есть ли способ поймать MySQLIntegrityConstraintViolationException вместо Exception , чтобы у меня был точный -детальный контроль над тем, что может пойти не так, а затем предоставить более краткую обратную связь -моему пользователю например (в браузере или на мобильном устройстве )?

Является ли это лучшим способом обработки операций и исключений, связанных с БД -, или существуют какие-либо передовые методы -, которые все используют?

заранее спасибо,

6
задан kaffein 25 January 2016 в 15:31
поделиться