我的Spring JPA应用程序中有三个独立的实体 - User,Department,Role
我的数据库中有一个连接表来关联每个实体: USER_DEPARTMENT_ROLE
我的问题是,如何在我的实体类中定义这种关系?我是否必须@ManyToMany在每个单独的实体中定义关系?我知道如何定义两个表之间的这种关系,但是对于两个以上的表,我不知道从哪里开始.
任何帮助表示赞赏!
起初我认为这个解决方案可能会解决我的问题:
@Entity
public class User {
@JoinTable(name = "user_permission",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "permission_id"))
@MapKeyJoinColumn(name = "project_id")
@ElementCollection
private Map<Project, Permission> permissions = new HashMap<>();
}
@Entity
public class Project {
...
}
@Entity
public class Permission {
...
}
Run Code Online (Sandbox Code Playgroud)
但在这个实现中,Permission每个Project. 我想完成为项目设置多个权限的能力,以便以下内容为真:
| user_id | project_id | permission_id |
|---------|------------|---------------|
| 1 | 1 | 1 |
|---------|------------|---------------|
| 1 | 1 | 2 |
|---------|------------|---------------|
| 1 | …Run Code Online (Sandbox Code Playgroud) 我从这里扩展我的问题:使用 JPA/Hibernate 使用三个表定义 CompositeKey?。在此示例中,我希望创建复合键来创建 PRODUCT_ID、CATEGORY_ID、STOCK_ID 的唯一组合。
我开发了下面的代码,但不确定如何将记录保存到数据库中。
Stock.java
@Entity
public class Stock implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "STOCK_ID", unique = true, nullable = false)
private Integer stockId;
@Column(name = "STOCK_CODE", unique = true, nullable = false, length = 10)
private String stockCode;
@Column(name = "STOCK_NAME", unique = true, nullable = false, length = 20)
private String stockName;
// Owner of the relationship
@OneToMany(fetch = FetchType.LAZY, …Run Code Online (Sandbox Code Playgroud)