Спящий уникальный в двух колонках - PullRequest
3 голосов
/ 05 апреля 2019

Приведена таблица пользователей с именем пользователя и адресом электронной почты.Пользователи могут использовать имя пользователя и адрес электронной почты для входа в систему. Пользователь может выбрать адрес электронной почты в качестве своего имени пользователя.

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

Возможно ли смоделировать это с помощью нотаций гибернации, или вам нужно сделать это на более высоком уровне, например, в процедурах проверки Java?

Небольшой пример:

| username | email      |
|----------+------------|
| user1    | a@smth.com |
| user2    | b@smth.com |

user2, изменение его имени пользователя на a@smth.com должно быть недопустимым действием, так как user1 уже имеет это значение в качестве своего электронного письма.

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

Вот пример кода для вашей справки.

@Entity()
@Table(name = "users",uniqueConstraints= @UniqueConstraint(columnNames = {"email", "username"}) )
public class Employee {

    @Column(name = "username")
    private String username;

    @Column(name = "email")
    private String email;

    //All other user entity fields and getters/setters etc......
}

Вот ссылка для справки.

0 голосов
/ 10 апреля 2019

Как сказал @coladict:

тогда то, что вы хотите, не поддерживается JPA или Hibernate. Вы можете добавить проверочное ограничение, если ваша версия базы данных 8.0.16 или выше, но в противном случае вам придется сделать это вручную перед вызовом persist (user)

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

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