首页 > 解决方案 > @ManyToMany 编译问题

问题描述

我一直在研究我的用户 - 角色 - 映射问题已经有一段时间了,但我目前陷入了这个问题:
init 方法的调用失败;嵌套异常是 org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany 针对未映射的类:

用户

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private Collection<Role> roles;

角色

    @ManyToMany(mappedBy = "roles")
    private Collection<User> users;

    @ManyToMany
    @JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
    private Collection<Privilege> privileges;

特权

    @ManyToMany(mappedBy = "privileges")
    private Collection<Role> roles;

我相信问题出在映射结构中的关系之间。任何建议都非常感谢。

标签: javaspringspring-boot

解决方案


您应该在所有“@ManyToMany”注释中使用“mappedBy”属性。

用户

@ManyToMany(fetch = FetchType.EAGER, mappedBy = "users")
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
private Collection<Role> roles;

角色

@ManyToMany(mappedBy = "roles")
private Collection<User> users;

@ManyToMany(mappedBy = "roles")
@JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
private Collection<Privilege> privileges;

推荐阅读