Ловля ограничительных нарушений в JPA 2.0

Рассмотрите следующий класс объекта, используемый с, например, EclipseLink 2.0.2 - где link атрибут не является первичным ключом, но уникальным nontheless.

@Entity
public class Profile {  
  @Id 
  private Long id;

  @Column(unique = true)
  private String link;

  // Some more attributes and getter and setter methods
}

Когда я вставляю записи с дублирующимся значением для link атрибут, EclipseLink не бросает a EntityExistsException, но броски a DatabaseException, с сообщением, объясняющим, что ограничение на уникальность данных было нарушено.

Это не кажется очень полезным, поскольку не было бы простого, независимая база данных, способ поймать это исключение. Каков был бы рекомендуемый способ иметь дело с этим?

Несколько вещей, которые я рассмотрел:

  • Проверение кода ошибки DatabaseException - Я боюсь, что этот код ошибки, тем не менее, является собственным кодом ошибки для базы данных;
  • Проверка существования a Profile с определенным значением для link заранее - это, очевидно, привело бы к огромному количеству лишних запросов.
11
задан wen 23 May 2010 в 17:59
поделиться

1 ответ

Когда я вставляю записи с повторяющимся значением для атрибута ссылки, EclipseLink не генерирует исключение EntityExistsException

Да, и поставщик JPA не должен генерировать исключение EntityExistException ] в этом случае вы не получите EntityExistException ни для чего другого, кроме первичного ключа.

(...), но выдает исключение DatabaseException с сообщением, объясняющим, что уникальное ограничение было нарушено.

Это очень НЕПРАВИЛЬНО из EclipseLink, провайдер JPA должен генерировать исключение PersistenceException или подкласс, но определенно не конкретное исключение, такое как o.e.p.e.DatabaseException . Это ошибка, и о ней следует сообщать, как я уже упоминал в предыдущем ответе .

Это не кажется очень полезным, поскольку не существует простого, независимого от базы данных способа перехвата этого исключения. Что было бы рекомендованным способом справиться с этим?

Тот же ответ, что и выше, см. Мой предыдущий ответ .

5
ответ дан 3 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: