java - 错误 : AnnotationException: mappedBy reference an unknown target entity property

标签 java spring postgresql hibernate jpa

我正在使用 JPA PostgreSQL 创建 Spring Boot 应用程序。

当我编译我的 spring 项目时,出现以下错误。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: eveserver.core.entity.User.name in eveserver.core.entity.Role.users

请帮助我理解我做错了什么。

这是我的User.java

package eveserver.core.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;

@Entity
@Table(name = "users")
public class User implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
    @Column(name = "name")
    private String username;
    @JsonIgnore
    @Column(name = "password")
    private String password;
    @Column(name = "email")
    private String email;
    private boolean enabled = false;


    @ManyToMany
    @JoinTable(name = "user_role",
            joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
    private Set<Role> roles;

    public User(){ }

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public User(String username, String password, String email, Set<Role> roles) {
        this.username = username;
        this.password = password;
        this.email = email;
        this.roles = roles;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }


    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }

    public void enable(){
        enabled = true;
    }
    public void disable(){
        enabled = false;
    }

}

角色.java

package eveserver.core.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.security.core.GrantedAuthority;

import javax.persistence.*;
import java.util.Set;

@Entity
@Table(name = "role")
public class Role  implements GrantedAuthority {
    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @ManyToMany(mappedBy = "role")
    @JsonIgnore
    private Set<User> users;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj){
        if (obj instanceof Role){
            Role r = (Role)obj;
            if (r.getId()==this.getId()){
                return true;
            }
        }
        return false;
    }

    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }

    @Override
    public String getAuthority() {
        return getName();
    }
}

这是我的

enter image description here

最佳答案

在您的 User 类中,您有一个名为 roles 的属性:

public Set<Role> getRoles() {
    return roles;
}

在您的 Role 类中,这是:

@ManyToMany(mappedBy = "role")
@JsonIgnore
private Set<User> users;

应该是:

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

mappedBy = "something" 实际上是在说,“在这个其他实体中,有一个名为 something 的属性可以获取此类型的实体列表(当您使用 @ManyToMany 注释时您所在的当前类型)。不是指定类型或类名,如 Role

关于java - 错误 : AnnotationException: mappedBy reference an unknown target entity property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310688/

相关文章:

windows - 运行 postgres 容器时出错 "Error response from daemon: invalid mode:/var/lib/postgresql/data."

java - 使用 RxJava + Retrofit 对列表中的每一项进行 API 请求

java - 如何从 java.sql.Connection 获取数据库 url?

java - 通用方法 - 不能应用于给定类型

java - Spring + Hibernate表未生成

Spring 和 tomcat 或 Spring 和 Glassfish

sql - 用于展平树的简单公用表表达式

java - Hibernate,获取uuid的映射异常

java - 无法在 Java 7 上启用 SNI

java - CXF 和多个 servlet 映射