Hibernate ConstraintViolationException getConstraintName - PullRequest
2 голосов
/ 14 апреля 2011
mysql> alter table metakey add constraint Name unique(name);
mysql> desc  metakey;
+-------+---------------------+------+-----+---------+----------------+
| Field | Type                | Null | Key | Default | Extra          |
+-------+---------------------+------+-----+---------+----------------+
| id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(45)         | NO   | UNI |         |                |
+-------+---------------------+------+-----+---------+----------------+


@Entity
@Table(name = "metakey",uniqueConstraints={@UniqueConstraint(name="Name",columnNames={"name"})})
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class MetaKey implements Serializable{
    @Id @Column @GeneratedValue private Long id;
    @Column private String name;
}


sess.save(obj);
 ..
}catch(ConstraintViolationException cve){
  log.error(cve.getMessage());
  log.info("Constraint name:"+cve.getConstraintName());
} 

Я получаю их в журнале - cve.getConstraintName () возвращает ноль

org.hibernate.util.JDBCExceptionReporter  - SQL Error: 1062, SQLState: 23000
org.hibernate.util.JDBCExceptionReporter  - Duplicate entry 'Unit' for key 'Name'

could not insert: [com.comp.MetaKey]
Constraint name:null

Есть ли способ найти имя ограничения?

Версия сервера: 5.1.56Hibernate версия: 3.6

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Джавадок говорит:

Возвращает имя нарушенного ограничение, если известно.

Returns:
    The name of the violated constraint, or null if not known.

Так что я думаю, что драйвер MySQL не дает доступа к имени нарушенного ограничения в сгенерированном им SQLException, или Hibernate не знает, как его получить из SQLException.

Посмотрите детали SQLException с помощью отладчика и посмотрите, можно ли его извлечь откуда-то. Если это возможно, то попробуйте расширить диалект, чтобы извлечь имя ограничения.

0 голосов
/ 24 января 2013

Пожалуйста, проверьте меня, отвечая почти на тот же вопрос: Hibernate: constraintName в MySQL имеет значение null

Надеюсь, это поможет, Алекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...