У меня есть 3 класса сущностей, как показано ниже: -
Ролевая сущность
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@LazyCollection(LazyCollectionOption.FALSE)
@JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
private Set<Privilege> privileges;
// getters, setters etc
}
Привилегированный субъект
@Entity
public class Privilege {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "privileges", fetch = FetchType.EAGER)
@JsonIgnore
private Set<Role> roles;
// getters, setters etc
}
Объект UrlsMapper
@Entity(name = "urls_mapper")
@Table(name = "urls_mapper")
public class UrlsMapper {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Enumerated(EnumType.STRING)
@Column(name = "http_method")
private HttpMethod httpMethod;
@Column(name = "path")
private String path;
@ManyToMany(fetch = FetchType.EAGER)
@MapKeyJoinColumn(name = "role_id", referencedColumnName = "id")
@JoinTable(
name = "u_r_p",
inverseJoinColumns = @JoinColumn(name = "privilege_id")
)
Map<Role, Privilege> privilegeMap;
// getters, setters etc
}
Ключи, первичные и внешние, которые создаются, как показано ниже
Журналы во время генерации таблицы, как показано ниже: -
Hibernate: create table u_r_p (urls_mapper_id bigint not null, privilege_id bigint not null, role_id bigint not null, primary key (urls_mapper_id, role_id)) engine=InnoDB
Hibernate: alter table u_r_p add constraint FKgd7gd9f9ded1s28swdudqs0ro foreign key (privilege_id) references Privilege (id)
Hibernate: alter table u_r_p add constraint FKrryprkx4j60lyjti16eysn5g5 foreign key (role_id) references Role (id)
Hibernate: alter table u_r_p add constraint FKfkthdnoca59a18ba96183p7ov foreign key (urls_mapper_id) references urls_mapper (id)
И я просто хочу знать, как я могу также добавить privilege_id в JoinTable u_r_p и есть ли другие лучшие варианты для этого. Ручное выполнение в базе данных является очевидной альтернативой, но я хотел знать решение на основе hbm2ddl.auto, чтобы код сам управлял им