Spring Boot JPA один-ко-многим и многие-к-одному с несколькими столами - PullRequest
0 голосов
/ 20 октября 2018

У меня есть 5 таблиц, у пользователя может быть много модулей / ролей / растений.user_master - это основная таблица с данными пользователя, а user_roles - это дополнительная таблица с данными модуля / роли / завода.Я сомневаюсь, как написать отношение в классе модели.

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_id - это первичный ключ для основных таблиц.

Iпросто хочу написать user_master и user_roles модель класса.Требуется сопоставление «один ко многим» и «многие к одному».

1 Ответ

0 голосов
/ 21 октября 2018

Для одного ко многим, вы можете иметь как ниже в вашем классе сущности:

  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
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...