Проверка Бина + Доступ к Базе Данных + Утверждение - PullRequest
0 голосов
/ 28 мая 2018

Я запутался в ситуации.Представьте себе класс, подобный Person:

@Entity
class Person {
    @NotBlank(message="Some message")
    @Column(name="ssn", nullable=false, unique=true)
    String ssn;
    ...
}

Ну, ssn должен быть уникальным, и я могу сделать это с помощью оператора unique=true, но для отображения некоторого сообщения для пользователей утверждение будетприятно:

@AssertTrue(message="SSN is already in use.")
public boolean isSsnAvailable() {
    // database query
}

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

Я думал о двух других возможностях:

  1. Создание собственного валидатора саннотация типа @Unique.
  2. Создайте временный атрибут с именем ssnAvailable, который будет заполнен PersonService.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

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

Для этого обычно Service.Совершенно верно выполнить запрос, который ищет человека с конкретным SSNPersonService подпись может выглядеть примерно так:

 public boolean isSsnPresent(String ssn)

Уникальное ограничение не поможет вам, если вы хотите проверить, существует ли SSN до , который вы пытаетесьсохранить человека в базу данных.

0 голосов
/ 28 мая 2018

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

e.getCause()

затем изменить, если оно является уникальным нарушением ограничения, и вернуть правильное сообщение.

...