JPA Как добавить уникальное ограничение на столбец для отношения @OneToMany, как на имени пользователя - PullRequest
6 голосов
/ 10 марта 2011

У меня есть класс Site, представляющий веб-сайт, и класс User.Site может иметь несколько User с.

class Site {

    private int site_ID;

    @OneToMany // with a join table
    private List<User> users;
    // ...
}

class User {

    private int user_ID;

    private String name;

    private String lastname;

    private String username;

    private String password;

}

Я хочу разрешить одному и тому же имени пользователя существовать на всех сайтах, но только по одному на сайте.

Site/User/username
1   /1   /username1
1   /2   /username2
2   /3   /username1

Как можноЯ так делаю?

Ответы [ 3 ]

8 голосов
/ 10 марта 2011

Пусть у пользователя есть ссылка на сайт:

@ManyToOne(optional=false)
private Site site;

Теперь добавьте ограничение для пользователя:

@Table(uniqueConstraints = {
    @UniqueConstraint(columnNames = { "username", "site" }))
} @Entity
public class User{
// etc
}

Вам также придется изменить отображение сайта:

@OneToMany(mappedBy="site")
private List<User> users;
6 голосов
/ 14 июля 2012

По умолчанию первичный индекс в объединяемой таблице уникален и основан на сайте и пользовательском FK Таким образом, у вас не может быть одного и того же пользователя с тем же дублированным сайтом.

Но если вы хотите применить ограничение:

class Site {

    private int site_ID;

    @OneToMany // with a join table
    @JoinTable(
        uniqueConstraints=@UniqueConstraint(columnNames={"Site_ID","users_ID"})
    )
    private List<User> users;
    // ...
}
0 голосов
/ 10 марта 2011

Чек @UniqueConstraint.Позволяет определить любое уникальное ограничение

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