gpt4 book ai didi

Hibernate ConstraintViolationException getConstraintName

转载 作者:行者123 更新时间:2023-12-03 18:42:50 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com