MySQLIntegrityConstraintViolationException не показывает имена столбцов в сообщении об исключении

0

Я использую JPA с Hibernate и MySQL.

То, что я хочу, чтобы поймать 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 имени? Есть ли какая-то конфигурация, которую я могу добавить для этого?

Теги:
jpa
jdbc

1 ответ

0
Лучший ответ

Мне удалось сделать это, как заметил @Billy Frost, используя поле @Table uniqueConstraints 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню