Mysql JPA ManyToMany联接表自动将索引设置为唯一
对于JPA来说,这里还是一个全新的地方,与一个问题斗争了将近两天,寻求帮助 我的项目使用Spring数据和MySql,目前有一个包含用户、组实体的非常简单的模式Mysql JPA ManyToMany联接表自动将索引设置为唯一,mysql,sql,database,hibernate,jpa,Mysql,Sql,Database,Hibernate,Jpa,对于JPA来说,这里还是一个全新的地方,与一个问题斗争了将近两天,寻求帮助 我的项目使用Spring数据和MySql,目前有一个包含用户、组实体的非常简单的模式 @Entity public class User { public User() {} public User(String username, boolean superUser, boolean blackList) { this.username = username; this.superUser = su
@Entity
public class User {
public User() {}
public User(String username, boolean superUser, boolean blackList) {
this.username = username;
this.superUser = superUser;
this.blackList = blackList;
}
@Id
String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
...
@ManyToMany
@ElementCollection
@JoinTable(name="user_groups",
joinColumns={@JoinColumn(name="USER_NAME", referencedColumnName="USERNAME")},
inverseJoinColumns={@JoinColumn(name="GROUPNAME")})
List<UserGroup> userGroups;
public void addGroup(UserGroup group) {
if (!this.userGroups.contains(group)){
this.userGroups.add(group);
}
}
}
@实体
公共类用户{
公共用户(){}
公共用户(字符串用户名、布尔超级用户、布尔黑名单){
this.username=用户名;
this.superUser=超级用户;
this.blackList=黑名单;
}
@身份证
字符串用户名;
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
...
@许多
@元素集合
@JoinTable(name=“用户组”,
joinColumns={@JoinColumn(name=“USER\u name”,referencedColumnName=“USERNAME”)},
inverseJoinColumns={@JoinColumn(name=“GROUPNAME”)}
列出用户组;
public void addGroup(用户组){
如果(!this.userGroups.contains(group)){
this.userGroups.add(组);
}
}
}
在DB中创建的联接表user\u groups
具有user\u name
和groupname
的索引,但是groupname
的索引是一个UK***并用UNIQUE标记,因此我不能添加groupA,userA
,groupA,userB
,因为它会抱怨违反UNIQUE键
我想将这两个值的组合作为联接表的唯一键,那么这里是否缺少任何特定的配置,或者是否使用了错误的配置 好吧,原来我在JPA上犯了一个新手错误,错过了这个
用户组字段的getter和setter。通过添加它们,表现在可以按预期工作