Hibernate ConstraintViolationException getConstraintName

标签 hibernate

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() 返回 null
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.56
hibernate 版本:3.6

最佳答案

javadoc 说:

Returns the name of the violated constraint, if known.

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


所以我猜 MySQL 驱动程序不会访问它生成的 SQLException 中违反的约束名称,或者 Hibernate 不知道如何从 SQLException 中获取它。

使用调试器查看 SQLException 的详细信息,看看它是否可以从某处提取。如果可以,请尝试扩展方言以提取约束名称。

关于Hibernate ConstraintViolationException getConstraintName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5661792/

相关文章:

java - 如何在 Spring 服务的 @Transactional 方法中实现 Oracle ADF ApplicationModule 和 JPA 之间的共享事务?

java - Hibernate 数据库迁移 - 合并重复实体

java - 多对一关系的 API 请求

java - 使用 Hibernate 配置 Spring。创建名称为 'usersDao' : Unsatisfied dependency expressed through field 'sessionFactory' 的 bean 时出错

java - Hibernate 更新查询问题

javax.servlet.http.Part.getSubmittedFileName()Ljava/lang/String

java - 添加 global-method-security 命名空间时,Spring 看不到 @Transactional

java - 如何访问 Hibernate 统计信息

java - Hibernate:重命名 @ManyToOne 关系中自动生成的 Id

hibernate - GWT 和 hibernate