【问题标题】:Spring Boot JPA One To Many and Many to One With Multiple TablesSpring Boot JPA 一对多和多对一多表
【发布时间】:2018-10-20 18:41:27
【问题描述】:

我有 5 个表,一个用户可以有许多模块/角色/工厂。 user_master 是包含用户详细信息的主表,user_roles 是包含模块/角色/工厂详细信息的子表。我的疑惑是如何在Model Class中写出关系。

user_master
------------
user_id int(10) unsigned
first_name  varchar(50)
last_name   varchar(50)
mail_id varchar(80)
user_status tinyint(4)
is_deleted  tinyint(4)
created_by  int(10)
created_date    date
modified_by int(10)
modified_date   date

user_roles
-----------
user_role_id    int(10) unsigned
user_id int(10) unsigned
module_master_id    int(10) unsigned
role_master_id  int(10) unsigned
plant_master_id int(10) unsigned

module_master:
module_master_id    int(10) unsigned
module_code int(10)
module_name varchar(50)
active_flag tinyint(4)

role_master:
role_master_id  int(10) unsigned
module_master_id    int(10) unsigned
role_code   int(10)
role_name   varchar(50)
active_flag tinyint(4)

plant_master:
plant_master_id int(10) unsigned
plant_code  int(10)
plant_name  varchar(50)
active_flag tinyint(4)

剩下的模块/角色/工厂都有自己的master,master_id是master表的主键。

我只想写user_masteruser_roles 模型类。需要一对多和多对一的映射。

【问题讨论】:

    标签: spring-boot hibernate-mapping


    【解决方案1】:

    对于一对多,您可以在您的实体类中拥有如下内容:

    1. @OneToMany 在用户实体中

      @OneToMany(mappedBy = "user")
      private List<Role> roles;
      
    2. @ManyToOne 在角色方面

      @ManyToOne
      @JoinColumn(name = "user")
      private User user;
      

      @ManyToMany

      @ManyToMany(cascade = { 
          CascadeType.PERSIST, 
          CascadeType.MERGE
      })
      @JoinTable(name = "user_role",
          joinColumns = @JoinColumn(name = "user_id"),
          inverseJoinColumns = @JoinColumn(name = "role_id")
      )
      private List<Role> roles= new ArrayList<>();
      

    和角色方面:

        @ManyToMany(mappedBy = "role")
        private List<User> users = new ArrayList<>();
    

    这里有一个带有 emdeded 的多对多示例:

        @Entity
        public class UserRoleMaster implements Serializable {
    
        @EmbeddedId
        private UserRoleMasterId id;
    
        @ManyToOne
        @JoinColumn(name = "user_master_id", referencedColumnName = "user_master_id", insertable = false, updatable = false)
        private UserMaster userMaster;
    
        @ManyToOne
        @JoinColumn(name = "user_roles_id", referencedColumnName = "user_roles_id", insertable = false, updatable = false)
        private UserRoles userRoles;
    
        //getter  //setter //constructures
    
           @Embeddable
           public static class UserRoleMasterId implements Serializable {
    
            @Column(name = "user_master_id")
            protected Long userMasterId;
    
            @Column(name = "user_roles_id")
            protected Long userRolesId;
           //constrcture //getter //setters
       }
     }
    

    【讨论】:

    • 在 user_roles 模型中,我也想关联 module_master primary_key 和其他 master 主键
    • 我有 user_master & user_roles 表。 User_master 将拥有用户数据,而 user_roles 将拥有各种主主键。例如 module_master_id,role_master_id & plant_master_id,每个 master 都有自己的模型。我不知道如何关联 user_master 和 user_roles。
    • 您可以使用嵌入式密钥为其创建单独的实体
    猜你喜欢
    • 2019-02-26
    • 2020-03-29
    • 2020-05-12
    • 2019-01-24
    • 1970-01-01
    • 2020-05-25
    • 2016-04-07
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多