我有一个代表网站Site
的班级User
。 Site
可以有多个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
我该怎么做?
答案 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
。它允许定义任何唯一约束