2016-05-14 5 views
0

私はJava Webアプリケーションを開発中です。アプリケーションは、RESTスタイルのバックエンドです。私はWebフレームワークとしてspring mvcを使用しており、永続性のためにJPA/Hibernateを使用しています。データベースはmysqlです。DataIntegrityViolationExceptionを処理して特定の原因を取得する方法

私はデータベースにテーブルを持っています。ここにはidを持つ単純なテキスト値が格納されています。だから私はそこに2つの列を持っています。しかし、私はそれらのテキスト値をユニークにしたい。既にSQLでこれを設定します。

誰かが同じ文字列を複数回挿入しようとするとどうなるかを処理するunittestを書いています。 Springは私にDataIntegrityViolationExceptionを返します。根本原因はMySQLIntegrityConstraintViolationExceptionです。根本原因から、私はsqlErrorCodeを取得できます。

これを処理するより良い方法はありますか?私はmysqlexceptionに依存したくないので、私のコードにエラーコードがあります。

+0

本当に原因を調べる必要がありますか? 2列の表のデータ整合性制約違反は他にはありませんか?また、そうした場合、データレイヤーに近い翻訳メカニズムを使用して、これをカスタム例外として再現することができます。そのため、関連するコードは特定のデータストアタイプまたはライブラリに依存する必要はありません。 – zapl

+0

現時点で翻訳メカニズムが私の解決策でした。しかし、私は他にはあり得ないというあなたの権利を推測します。 – Patrick

答えて

1

私は、根本的な原因で春のデータで囲まれたDB例外を検索するのは不便です。新しいエントリをデータベースに永続させる前に、一意性を手動でチェックします。

スプリングでスローされた例外はRuntimeExceptionであることを覚えておいてください。RuntimeExceptionはコード内に「バグ」があることを示すため、処理しないでください。この喧嘩が最初に投げられることはあなたの責任です。

+0

これは良いアプローチです。だから私はMySQLの詳細を気にする必要はありません。 – Patrick

関連する問題