2017-09-18 157 views
1

我有两个实体,我想通过ManyToMany进行关联。我发现了很多例子(比如这一个https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany#Example_of_a_ManyToMany_relationship_annotationhttps://vladmihalcea.com/the-best-way-to-use-the-manytomany-annotation-with-jpa-and-hibernate/),甚至在我的代码中有另一个地方,ManyToMany关系似乎有效,但至今我仍无法确定这一点。Spring Boot JPA ManyToMany MappingException

enter image description here

,我发现了以下异常:

产生的原因: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 

} 
+2

您将实体角色映射到表user_role(即连接表)而不是表角色。 –

+2

如果你不太明白JB Nizet在说什么:在角色类中将@Table(name =“user_role”)'改为'@Table(name =“role”)''。目前,您已经将2个表映射到相同的表名(角色表和manytomany关系的连接表),这会造成相当大的混乱。 –

回答

1

检查this link

不管怎么说,问题是你有类角色

@Entity 
@Table(name = "user_role") 
public class Role { 

,并在Class用户

@JoinTable(
     name = "user_role", 
     joinColumns = @JoinColumn(name = "user_id"), 
     inverseJoinColumns = @JoinColumn(name = "role_id")) 

无论是地方台的名称是一样的... ...
这一定是错误的原因...