如何从ConstraintViolationException获取DB字段名称 - Hibernate

时间:2012-02-06 13:38:59

标签: java hibernate

如何在hibernate中插入数据库时​​获取导致ConstraintViolationException的DB字段的名称。

我有Table Like

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

投掷ConstraintViolationException due to "BLORE" (CITY) already Exist

如果我试图插入。

"SATISH","MLORE" through hibernate

投掷ConstraintViolationException due to "SATISH" (NAME) already Exist

我的问题是 如何通过Hibernate获取导致异常ConstraintViolationException的fieldName。

1 个答案:

答案 0 :(得分:0)

由于可能存在其他可能违反的约束(例如组合键),您只有违反约束的名称,在您的情况下可能只是列名称(但是,我不完全确定)关于那个)。您可以通过getConstraintName()上的ConstraintViolationException来获取违规约束的名称。