ManyToMany 的应用程序 - Spring 不起作用
Application of ManyToMany - Spring does not work
我正在实现用户和权限之间的多对多关系,我无法断定我哪里错了,它不起作用 (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);
}
}
JPA 使用(并可能在您的情况下创建)中间连接 table 用于多对多关系,您不能使用与您在实体中指定的名称不同的引用列名称。
所以你需要设置:
- 用户 class
@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")
)
- 其他 table 也一样。
我正在实现用户和权限之间的多对多关系,我无法断定我哪里错了,它不起作用 (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);
}
}
JPA 使用(并可能在您的情况下创建)中间连接 table 用于多对多关系,您不能使用与您在实体中指定的名称不同的引用列名称。
所以你需要设置:
- 用户 class
@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")
)
- 其他 table 也一样。