spring数据中的实体继承

时间:2018-04-30 22:23:34

标签: spring-boot orm spring-data spring-data-jpa mapping

我正在开发一个简单的应用程序来学习如何使用spring boot / hibernate,并且我使用Spring安全性与Role / Users系统,所以我有一个名为User的实体,另一个叫角色。

对于我的应用程序我有两种类型的用户:

  1. 带有属性(ID,用户名,密码)的管理员

  2. 客户端,包含属性(ID,用户名,密码,电子邮件,电话号码)

  3. 这就是为什么我决定在spring数据中使用继承的概念,创建一个具有属性(id,用户名,密码)的实体用户和继承实体用户并具有其他属性的客户端实体(id ,电子邮件,phoneNumber的)。

    在这个应用程序中,客户端可以添加/删除/ ..我的数据库Mysql中存在的一些产品,所以我想在实体客户端和实体产品之间实现(一对多/多对一)的映射。 / p>

    现在我应该如何实现这个(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;
    
    
               }
    

1 个答案:

答案 0 :(得分:1)

您应该有一个表'user'和2个角色'ADMIN'和'CLIENT'。我建议两种用户类型应该具有相同的详细信息,包括电子邮件地址和电话号码。因此,当用户登录时,您可以从userdetails服务加载用户角色/授予权限。

修改 您的用户表应该看起来像

id,username,password,email,phoneNumber,added_by_id

added_by_id是一个自连接并引用user.id列。

所以在您的实体类中,您将执行以下操作。

...
@ManyToOne
@JoinColumn(name = "added_by_id")
protected User addedBy;