JPA如何在@OneToMany关系的列上添加唯一约束,例如在用户名上添加

时间:2011-03-10 14:17:47

标签: java hibernate jpa

我有一个代表网站Site的班级UserSite可以有多个User s。

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 个答案:

答案 0 :(得分:8)

让用户拥有网站参考:

@ManyToOne(optional=false)
private Site site;

现在将约束添加到用户:

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

您还必须更改网站映射:

@OneToMany(mappedBy="site")
private List<User> users;

答案 1 :(得分:6)

默认情况下,连接表上的主索引是唯一的,并且基于站点和用户FK 因此,您不能让相同的用户重复使用相同的网站。

但是如果你想强制约束:

class Site {

    private int site_ID;

    @OneToMany // with a join table
    @JoinTable(
        uniqueConstraints=@UniqueConstraint(columnNames={"Site_ID","users_ID"})
    )
    private List<User> users;
    // ...
}

答案 2 :(得分:0)

检查@UniqueConstraint。它允许定义任何唯一约束