我正在實作用戶和權限之間的多對多關系,但我無法斷定我錯在哪里,它不起作用(Unable to map collection rs.raf.demo.model.User.permissions):
@Data
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@Column
private String username;
@Column
private String password;
@ManyToMany
@JoinTable(
name = "USERS_PERMISSIONS",
joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "PERMISSION_ID", referencedColumnName = "ID")
)
private List<Permission> permissions = new ArrayList<>();
}
================================================== ================================
@Data
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "permission_id")
private Long userId;
private String type;
@ManyToMany
@JoinTable(
name = "USERS_PERMISSIONS",
joinColumns = @JoinColumn(name = "PERMISSION_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "ID")
)
@JsonIgnore
private List<User> users = new ArrayList<>();
}
我在這個例子中實作了用戶和權限,這是有效的(我看不出用戶和權限的區別):
@Data
@Entity
@Table(name = "STUD")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String lastName;
private String firstName;
@ManyToMany
@JoinTable(
name = "STUDENTS_COURSES",
joinColumns = @JoinColumn(name = "STUDENT_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "COURSE_ID", referencedColumnName = "ID")
)
private List<Course> courses = new ArrayList<>();
}
================================================== ==============================
@Data
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
@ManyToMany
@JoinTable(
name = "STUDENTS_COURSES",
joinColumns = @JoinColumn(name = "COURSE_ID", referencedColumnName = "ID"),
inverseJoinColumns = @JoinColumn(name = "STUDENT_ID", referencedColumnName = "ID")
)
@JsonIgnore
private List<Student> students = new ArrayList<>();
public void addStudent(Student student) {
students.add(student);
student.getCourses().add(this);
}
public void removeStudent(Student student) {
students.remove(student);
student.getCourses().remove(this);
}
}
uj5u.com熱心網友回復:
rJPA 為多對多關系使用(并可能在您的情況下創建)中間連接表,并且您不能使用與您在物體中指定的名稱不同的參考列名稱。
所以你需要設定:
- 在用戶類
@ManyToMany
@JoinTable(
name = "USERS_PERMISSIONS",
joinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "PERMISSION_ID", referencedColumnName = "PERMISSION_ID")
)
- 在許可
@ManyToMany
@JoinTable(
name = "USERS_PERMISSIONS",
joinColumns = @JoinColumn(name = "PERMISSION_ID", referencedColumnName = "PERMISSION_ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID", referencedColumnName = "USER_ID")
)
- 其他表也一樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394739.html
上一篇:psycopg2.errors.UndefinedTable:關系“authentication_author”不存在:Djangov4
