spring-boot - Spring数据中的实体继承
问题描述
我正在开发一个简单的应用程序来学习如何使用 spring boot/hibernate,并且我正在使用带有 Role/Users 系统的 spring security,所以我有一个名为 User 的实体,另一个名为 Roles 的实体。
对于我的应用程序,我有两种类型的用户:
具有属性的管理员( id ,用户名,密码)
具有属性的客户端(id、用户名、密码、电子邮件、电话号码)
这就是为什么我决定在 Spring Data 中使用继承的概念来创建具有属性(id、用户名、密码)的实体用户和继承实体用户并具有其他属性(id、电子邮件、电话号码)的客户端实体。
在这个应用程序中,客户端可以添加/删除/..我的数据库 Mysql 中存在的一些产品,所以我想在实体客户端和实体产品之间实现(一对多/多对一)的映射。
现在我应该如何实现这个(ORM SIDE),我的意思是我应该在实体客户端和产品之间或用户和产品之间进行映射?
如果还有其他更好的解决方案,我将非常感激:)。
编辑 :
@Entity
@Data
@AllArgsConstructor @NoArgsConstructor
public class User implements Serializable {
@Id @GeneratedValue
private Long id;
@Column(unique = true)
private String username;
private String password;
private String prenom;
private String nom;
private Long Tel;
private String CIN;
private String Email ;
@ManyToMany(fetch = FetchType.EAGER)
private Collection<AppRole> roles = new ArrayList<>();
@ManyToOne
@JoinColumn(name="client_id")
private User Client;
@ManyToOne
@JoinColumn(name = "manager_id")
private User Manager;
}
解决方案
您应该有一个表“用户”和 2 个角色“管理员”和“客户”。我建议两种用户类型都应具有相同的详细信息,包括电子邮件地址和电话号码。因此,当用户登录时,您可以从 userdetails 服务加载用户角色/授予的权限。
编辑: 您的用户表应该看起来像
id , username , password , email , phoneNumber , added_by_id
added_by_id 是一个自连接和对 user.id 列的引用。
因此,在您的实体类中,您将执行以下操作。
...
@ManyToOne
@JoinColumn(name = "added_by_id")
protected User addedBy;
推荐阅读
- json - TypeError:value.forEach 不是函数 TypeError:value.forEach 不是 FormArray.patchValue 处的函数
- sql - 如何使用where子句中的父ID从另一条记录中的同一表中获取值
- javascript - 一旦我调用函数 node.js,工作线程就会被主线程终止
- node.js - 在 docker 上向 mongo db 验证用户身份
- java - 从 Path 对象中获取目录名称,末尾不带斜线
- ios - TabBar 未显示 TabBar 项目标题 Swift 5
- r - 从 RStudio 将多个文件上传到 Google Cloud
- php - filesize 必须大于 0 php write files aldough 代码已准备好防止错误
- javascript - 每次运行函数时如何将对象添加到数组中?
- xaml - 如何根据 Xamarin.Forms xaml 中的本地化语言显示选取器项目