我有一个场景,一个员工可以属于多个组织,每个组织他可以有不同的角色。我怎样才能在jpa中映射这个?
Staff.java
public class Staff {
@ManyToMany
@JoinTable(name="STAFF_ORGANIZATION",joinColumns=@JoinColumn(name="staff_id"),inverseJoinColumns=@JoinColumn(name="organization_id"))
private Set<Organization> organizations;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
}
Organization.java
public class Organization {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
private String OrganizationName;
@ManyToMany(mappedBy="organizations")
private Set<Staff> staff;
}
StaffRoles.java
public class StaffRoles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column
@Enumerated(EnumType.ORDINAL)
private Roles roles;
public enum Roles {
USER(100), ADMIN(200);
private int values;
Roles(int values) {
this.values = values;
}
public int getValues() {
return values;
}
}
任何人都可以帮助我将角色映射到员工。如此多的员工可以属于许多组织,每个组织都可以拥有不同的角色。
任何帮助都将受到高度赞赏!
答案 0 :(得分:1)
虽然这个问题没有写清楚,但我会根据我的理解来回答你的问题。
下面是表格外观的ER图表。
现在你只需要创建所需的类。
现在通过ManyToMany和OneToOne连接正确的实例变量,以实现您的目标。
编辑:
在使用更具体的信息更新问题之后,我可以在此答案中提供更多帮助。首先创建一个StaffOrganizationRoles类,它将位于StaffOrganization和Roles之间。接下来,使StaffOrganization位于Staff和Organization之间,这意味着不是ManyToMany,而是来自Staff的ManyToOne - &gt; StaffOrganization,以及来自组织的ManyToOne&gt; StaffOrganization。
public class StaffOrganizationRoles {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "stafforganization_id", unique = false, nullable = false)
private StaffOrganization user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", unique = false, nullable = false)
private Role role;
}
员工组织班:
public class StaffOrganization {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "staff_id", unique = false, nullable = false)
private Staff staff;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "organization_id", unique = false, nullable = false)
private Organization organization;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "staffOrganization")
private Set<StaffOrganizationRoles> staffOrganizationRoles = new HashSet<>(0);
}
我编辑了上面的图片来代表新的ER图。
希望这会对你有所帮助。