project
在我的数据库里。每个
users
各
user
projects
. 这将是一部经典之作
ManyToMany
设置我的实体并将它们连接起来:
@Entity
public class User {
@id
@Column(name="ID")
public int id;
@ManyToMany
public Set<Project> projectSet;
}
@Entity
@Table(name="PROJECT")
public class Project {
@id
@Column("ID")
private int id;
@ManyToMany
private Set<User> users;
}
实现我的存储库:
@Repository
public interface ProjectRepo implements JpaRepository<Project, Integer> {
public Set<User> getAllUsers();
}
现在让我们假设我想指定每个用户在这个项目中的角色。所以我想要一张桌子
role
@Entity
@Table(name="ROLES")
public class Role {
@id
@Column(name="ID")
private int id;
@Column(name="DESCRIPTION")
private String description;
}
但这与我的用户和项目有什么联系呢?所以我想展示的是,一个用户可以在一个项目中有一个角色,但在许多项目中有许多角色。此外,一个角色可以分配给一个或多个项目中的多个用户,一个项目可以有多个用户,其中每个用户只有一个角色,但有多个角色。如果我简单地添加一个
@ManyToMany Set<Roles> roleSet
对我
Users
,我不能说哪个用户将在哪个项目中扮演哪个角色。那么如何描述呢?我需要创建第三个类来连接它们吗?
编辑1:
为了澄清,我将尝试在marknote的回答中提供建议的代码-
假设我有上面的课程(
Project
,
User
Role
所以我要创建一个新类
Assignment
,我的
项目
还有我的
角色
.
@Entity
@Table(name="USER")
public class User {
@id
@Column(name="id")
private int id;
@Column(name="firstname")
private String firstname;
@Column(name="lastname")
private String lastname;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
@Entity
@Table(name="PROJECT")
public class Project {
@id
@Column(name="PNUM")
private String pnum;
@Column(name="PNAME")
private String pname;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
@Entity
@Table(name="ROLE")
public class Role {
@id
@Column(name="id")
private int id;
@Column(name="DESCRIPTION")
private String description;
@OneToMany
private List<Assignment> assignments;
//getters and setters and stuff
}
到目前为止还可以,所以我将创建以下内容
分配
-班级。我需要能够从
使用者
到
以及
角色
,所以我需要这三个字段。让我们来设计(通常的)用例:桌子
分配
使用者
项目
和
角色
通过将FKs中的PK组合到名称表。现在,Spring Boot JPA中的组合PK通常(据我所知)在使用
@Embeddable
-注释。从这个角度来看,我会做以下几点:
@Embeddable
public class AssignmentId implements Serializable {
private User user;
private Project project;
private Role role;
}
-类别至:
@Entity
@Table(name="ASSIGNMENT")
public class Assignment {
@EmbeddedId
private AssignmentId assignmentId;
}
现在这样做时,我在尝试运行spring boot时遇到以下错误:
有人能解释这个错误吗?这可能是一个问题
@EmbeddedId
我想。
编辑2
@Embedded
Entity
对于元素:
private Role role;
private Project project;
private User user;