-
Type:
Improvement
-
Resolution: Fixed
-
Priority:
Major
-
Component/s: None
-
None
やはり、一意制約違反の例外であることをcatchして処理したいことが多い!
発生させるExceptionは、互換性のために現状発生しているSQLRuntimeExceptionを
継承したExceptionであること。
http://ml.seasar.org/archives/jpa/2008-April/000096.html
MySQL: 1022 & 1062
http://www.robbie.jp/developerGuide3.html
Oracle: 1
しかし、ErrorCodeで判断するべきかと思っていたが、
S2JDBCの実装を見るとSQLStateの先頭2桁が「"23", "27", "44"」で判定している。
これは正しい(信頼できる)のかどうかをきっちり調査しないといけない。
S2JDBCとしては確信的にこの仕様で実装しているようだが、
http://ml.seasar.org/archives/seasar-user/2007-December/011988.html
案の定、以下にて問題が発生しているが、特になんの返信もない。
http://ml.seasar.org/archives/seasar-user/2008-March/013477.html
ErrorCodeで実装するか、SQLStateで実装するか悩む。
基本的には、狭い範囲で実装して随時確実なものを
追加していく方が良いかもしれないのでやはり「ErrorCode」方式か!?
いざってときのために、ConfigでErrorCodeの候補を設定できるようにするのがベスト。
[ErrorCode]
A. 独自実装で頑張る必要がある。
B. 実際のDBで検証した値を利用すると、パターン網羅が狭い可能性あり
[SQLState]
A. 参考実装があるので実装は楽
B. 信頼性が不明。網羅性はありそうだが余計なものまで巻き添えになる可能性あり。