私は現在、Play 2.0 (Scala) で Play!ing を行っています。とても楽しいことだと認めざるを得ません。データベース操作の例外に関する質問があります。
ドメインクラスとしてCarがあり、フィールドの1つに整合性制約があるとしましょう。モデルを言って、データベースで同じモデル名を持つ2つの行を持つことができないとしましょう:
case class Car(id: Pk[Long], name: String, model: String)
次のようにDBにレコードを挿入しようとしています:
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'
Exceptionの代わりにMySQLIntegrityConstraintViolationExceptionをキャッチして、何がうまくいかないかをきめ細かく制御し、たとえば (ブラウザーまたはモバイル デバイスで) ユーザーにより簡潔なフィードバックを提供する方法はありますか?
これは、DB 関連の操作と例外を処理するための最良の方法ですか、それとも誰もが使用するベスト プラクティスはありますか?
前もって感謝します、