MySQLIntegrityConstraintViolationException未在异常消息

时间:2017-12-12 15:44:13

标签: java mysql jpa jdbc

我正在JPA使用HibernateMySQL

我想要的是捕获 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;
}

例外

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名称?是否有一些配置我可以在某处添加来完成此任务?

1 个答案:

答案 0 :(得分:0)

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

@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;
}