[jpa:98] Re: MySQLの一意制約違反を表すエラーコード
Takeshi Namao
[E-MAIL ADDRESS DELETED]
2008年 4月 3日 (木) 03:09:09 JST
中村さん
生尾です。
JPA MLでは初めまして。
亀レスですが。
> MySQLが返すエラーコードですが、
> 「Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)」と
> 「Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)」の
> 違いをご存知の方がいたら教えていただきたいです。
以前に自分もハマった気がしないでもないですが
http://bugs.mysql.com/bug.php?id=5312
このスレッドを参照すると分かるかと思います。
1062は、InnoDB/MyISAMが出力する重複エラーコード
1022は、NDBClusterが出力する重複エラーコードのようです。
コードは違うが意味は同じだから同じように
扱えとのことです。
以上、よろしくお願いします。
2008/4/1 Toshihiro Nakamura <[E-MAIL ADDRESS DELETED]>:
> 中村(taedium)です。
>
> MySQLが返すエラーコードですが、
> 「Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)」と
> 「Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)」の
> 違いをご存知の方がいたら教えていただきたいです。
>
> これを知りたい背景は、
> JPAで本当に一意制約違反が発生したかどうかを
> エラーコードで判別したいからです。
>
> JPAでは一意制約違反の発生を示す例外として
> EntityExistsExceptionが用意されていますが、
> HibernateやToplink Essentialsでは、
> 一意制約違反かどうかに関係なく何らかの制約違反で
> あれば(NotNull制約違反など)この例外をスローしてしまっています。
>
> 本当に一意制約違反が発生したかどうかを知るには
> RDBMSごとに原因となったSQLExceptionのgetSQLSate()メソッドや
> getErrorCode()メソッドが返す値から判別するしかなさそうです。
>
> MySQL 5.0.45では、一意制約違反が発生すると
> SQLException#getErrorCode()メソッドは1062を返します。
> # 重複する主キーや一意キーをINSERTしてみて確かめました。
>
> ただ、マニュアルを見ると1062によく似ている1022があって
> 違いがわかりませんでした。
>
> http://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
>
> 場合によっては、一意制約違反で1022が返されるときがあるのでしょうか?
>
> --
> Nakamura Toshihiro <[E-MAIL ADDRESS DELETED]>
>
> _______________________________________________
> jpa mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/jpa
>
--
Takeshi Namao
[E-MAIL ADDRESS DELETED]
jpa メーリングリストの案内