java - MySQLIntegrityConstraintViolationException 未在异常消息中显示列名

标签 java mysql jpa jdbc

我将 JPAHibernateMySQL 一起使用。

我想要的是捕获MySQLIntegrityConstraintViolationException来获取unicity约束违规,并显示哪个字段被违规,从异常消息中获取字段名称,但它只显示我用一些奇怪的哈希值代替列名。

我的映射只是一些默认的映射:

@Entity
@Table(name = "myentity")
public class SomeEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(unique = true, nullable = false, name = "somefield")
    @NotNull
    private String somefield;
}

异常(exception)

caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '54533355000175' for key 'UK_bg2tfjjhyqxens7cw8a4uhscw'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)

我想要解析的消息是:

Duplicate entry '54533355000175' for key 'UK_bg2tfjjhyqxens7cw8a4uhscw'

如何将此键 'UK_bg2tfjjhyqxens7cw8a4uhscw' 转换为正确的列 somefield 名称?我可以在某处添加一些配置来完成此任务吗?

最佳答案

我设法做到了 @Billy Frost使用 @Table uniqueConstraints 注释字段指出。

@Entity
@Table(name = "myentity", uniqueConstraints = { 
  @UniqueConstraint(name = "theNameIWant"), columnNames={"somefield"},
  ... other constraints ...
}
)
public class SomeEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Column(unique = true, nullable = false, name = "somefield")
    @NotNull
    private String somefield;
}

关于java - MySQLIntegrityConstraintViolationException 未在异常消息中显示列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47776410/

相关文章:

java - jmockit 模型,出现错误 java.lang.NoSuchFieldError : $MMB

java - 无法使用 Jetty、RestEasy 和 Guice 从导出的 JAR 中找到消息正文阅读器

java - 右连接 JPA 查询无法获得准确的输出

php - SQL - 使用分组依据显示没有数据的月份

java - 使用 Ebean 在 Play Framework 2.3.3 中映射 @ManyToOne 关系的异常

java - ManyToOne 关系背面的项目列表

java - android 在网络上发布数据

java - 将表达式的结果分配给原语

mysql - 显示相关记录 vb.net mysql

java - 为什么Eclipse不生成完整的persistence.xml?