mysql - 用于多对多表关系的 Spring Data JPA 注释

标签 mysql hibernate jpa spring-boot spring-data-jpa

我正在使用 Spring Boot 开发 Web 应用程序。我有如下数据库表:

role
----
id  name
1   admin
2   user
3   employee

employee
--------
id  name
1   Juan
2   Pedro
3   Marcos
4   Lucas

user
----
id  employee_id role_id     username    password
1   1           1           juan1       hello
2   1           3           juan2       hello
3   2           2           pedro1      hello
4   2           3           pedro2      hello
5   3           3           marcos      hello
6   4           3           lucas       hello

以下是域对象类:

public class Role  {
...
    @ManyToMany(mappedBy = "roles")
    private Set<Employee> employees;

---
public class Employee {
...
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user", 
        joinColumns = @JoinColumn(name = "employee_id", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")
    )
    private Set<Role> roles;

我想知道我需要在 User 类中使用哪些注释。我正在关注这个 tutorial .但这没有第三类,因为第三个表 (book_publisher) 除了外键 (book_id, publisher_id) 没有其他字段。

谢谢。

最佳答案

您将需要从 Employee 到 User 的对多关联,因为 User 是所谓的属性关联。

用户实体将有一个复合 ID 作为主键。

请从 Thorben Jansen 那里找到一篇关于该主题的优秀文章: https://www.thoughts-on-java.org/many-relationships-additional-properties/

关于mysql - 用于多对多表关系的 Spring Data JPA 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47794350/

相关文章:

mysql - EJBQL/HQL 命名参数列表

maven - 如何创建 Java EE 7 Maven IntelliJ 项目

java - 多对多 - 仅在连接表和一张表中保存/更新

java - 用户插入的作为实体 ID 的字符串 [EclipseLink]

mysql - 无法在 Google Compute 上使用带有 PDO 的 SSL 连接到 Google Cloud MySQL

mysql - 如何合并 4 个 mysql 表中的数据

mysql - 如何查询 2 个 SQL 表并使用 1 个查询更改数据

php - 子选择或子查询

java - hibernate 中的类转换异常

mysql - Spring、Hibernate、MySQL - 事务如何工作 - 结论/问题**