DBフィールド名をConstraintViolationExceptionから取得する方法 - Hibernamte

hibernateでDatabaseに挿入中にConstraintViolationExceptionを引き起こすDBフィールドの名前を取得する方法。

私はテーブルが好きです

mysql> desc Mytable;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | bigint(11)  | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20) | YES  | UNI | NULL    |                |
| city  | varchar(20) | YES  | UNI | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

テーブル内のレコードは

mysql> select * from Mytable;
+----+--------+-------+
| id | name   | city  |
+----+--------+-------+
|  1 | SATISH | BLORE |
+----+--------+-------+
1 row in set (0.00 sec)

今、私は挿入しようとしています

"RAMESH","BLORE" through hibernate.

"BLORE"(CITY)が既に存在しているため、 ConstraintViolationExceptionがスローされています

もし挿入しようとしているなら。

"SATISH","MLORE" through hibernate

"SATISH"(NAME)が既にExist しているため、 ConstraintViolationExceptionがスローされています。

私の質問は Hibernateを通じて例外ConstraintViolationExceptionを引き起こしているfieldNameを取得する方法。

2

1 答え

違反する可能性のある他の制約があるかもしれないので(例えば、結合されたキー)、あなたは違反している制約の名前しか持っていません。あなたの場合は列名かもしれません(しかし、 。 ConstraintViolationException getConstraintName()を呼び出すことによって、違反した制約の名前を取得できます。

0
追加された
@sateeshうーん、それはMySQLの方言の問題かもしれません。 AFAIK MySQLDialect getViolatedConstraintNameExtracter()メソッドをオーバーライドしないため、引き渡される制約名として常に null 例外。その場合、ネストされた SQLException から制約名を手動で取得する必要があるようです。
追加された 著者 Thomas,
ありがとうThomas、getConstraintName()メソッドでNULLを与えてみました。
追加された 著者 sateesh,