首页 > 解决方案 > cause.getConstraintName() 返回一个奇怪的字符串而不是实际的约束名称

问题描述

我有一列设置为 as unique = true

这是我的实体的代码 -

@Entity
@Table(name = "users", uniqueConstraints=[UniqueConstraint(name = "userName", columnNames=["user_name"])])
class UserEntity(@Column(name = "user_id", nullable = false)
                 @Id @GeneratedValue(strategy = GenerationType.AUTO)
                 var id: Long = 0,
                 @Column(name = "user_name", nullable = false, unique = true)
                 @field:NotEmpty(message = "Please provide a user name")
                 var userName: String?)

现在,当存在DataIntegrityViolationExceptionConstraintViolationException由于尝试插入重复项时user_name,我尝试像这样提取约束名称的确切名称 -

val failConstraint = (ex.cause as ConstraintViolationException).constraintName

但是,我得到一个奇怪的字符串,而不是正确的约束名称 - “uk_k8s0f4n7n77w1a16yhua69ony”

详细的留言是这样的——

错误:重复的键值违反了唯一约束“uk_k8s0f4n7n77w1a16yhua69ony”\n 详细信息:键 (user_name)=(krtkush) 已存在。

我大致遵循这个答案 -识别触发 DataIntegrityViolationException 的约束名称

我哪里错了?

标签: spring-bootjpaspring-data-jpaspring-boot-jpa

解决方案


我必须使我的 IDE 缓存无效并重新启动它才能工作。代码没有错。


推荐阅读