我正在使用Spring Boot处理应用程序,因此我正在使用的UML类有3个实体:
管理员使用Manager可以映射一对多/多对一 与实体客户端一对多/多对一。
经过一些研究后,我将其更改为用户/角色系统,因此实体用户 有这样的属性:
public class AppUser implements Serializable {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
@ManyToMany(fetch = FetchType.EAGER)
private Collection<AppRole> roles = new ArrayList<>();
}
角色实体
public class AppRole implements Serializable {
@Id @GeneratedValue
private Long id;
private String roleName;
}
如何实施其他实体,Manager和Client,因为它们具有其他不同的属性?
以及我现在应该如何实现映射,因为只有一个实体?
提前谢谢。
答案 0 :(得分:1)
我认为您应该在AppUser
类中添加这些字段,并在需要时插入数据。例如,在创建Manager
时,您可以输入admin_id
并将client_id
留空。这就是一个admin
在他下面也可能有多个managers
的方式。
@Entity
@Table(name = "AppUser")
public class AppUser implements Serializable {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
@Column(unique = true)
private String email;
@Column(unique = true)
private String phone;
private String address;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private Collection<AppRole> roles = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "client_id")
private AppUser client;
@ManyToOne
@JoinColumn(name = "manager_id")
private AppUser manager;
@ManyToOne
@JoinColumn(name = "admin_id")
private AppUser admin;
}
然后,您可以根据您的要求为每个roles
分别提供appUser
。
如果您尚未使用Spring Security
,则应将其用于角色和权限。