我有两个实体,我想通过ManyToMany进行关联。我发现了很多例子(比如这一个https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany#Example_of_a_ManyToMany_relationship_annotation或https://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/),甚至在我的代码中有另一个地方,ManyToMany关系似乎有效,但至今我仍无法确定这一点。Spring Boot JPA ManyToMany MappingException
,我发现了以下异常:
产生的原因:org.hibernate.MappingException:外键(FKru66hm0369ayn8dvjj2rgxr9v:USER_ROLE [ROLE_ID]))必须具有相同的列数为被引用的主键(USER_ROLE [USER_ID,ROLE_ID])
类用户
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private long id;
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles;
// getters and setters
}
级角色
@Entity
@Table(name = "user_role")
public class Role {
@Id
@GeneratedValue
@Column(name = "role_id")
private long id;
@ManyToMany(mappedBy = "roles")
private Set<User> users;
// getters and setters
}
您将实体角色映射到表user_role(即连接表)而不是表角色。 –
如果你不太明白JB Nizet在说什么:在角色类中将@Table(name =“user_role”)'改为'@Table(name =“role”)''。目前,您已经将2个表映射到相同的表名(角色表和manytomany关系的连接表),这会造成相当大的混乱。 –