我正在使用 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();
}
}
这是我的表
最佳答案
在您的 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/