Я столкнулся с проблемой, когда у меня есть пользователь, который может быть зарегистрирован в нескольких компаниях.Эти компании могут зарегистрировать несколько продуктов.И пользователь должен знать, на какие продукты, на какие компании он имеет права.
Это мое решение до сих пор, но оно не возвращает роли правильно:
class User {
@Id
@Column(name = "USER_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "USERNAME", unique = true)
private String username;
@Column(name = "PASSWORD")
private String password;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "USER_ROLES",
joinColumns = {@JoinColumn(name = "USER_ID"), @JoinColumn(name = "COMPANY_ID"), @JoinColumn(name="PRODUCT_ID")},
inverseJoinColumns = {@JoinColumn(name = "ROLE_ID"), @JoinColumn(name = "COMPANY_ID"), @JoinColumn(name="PRODUCT_ID")})
private Set<Role> roles = new HashSet<>();
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "USER_COMPANIES",
joinColumns = {@JoinColumn(name = "USER_ID")},
inverseJoinColumns = {@JoinColumn(name = "COMPANY_ID")})
private Set<Company> companies = new HashSet<>();
}
class Role {
@Id
@Column(name = "ROLE_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "ROLE_NAME")
@Enumerated(EnumType.STRING)
@NaturalId
private RoleName role;
@ManyToMany(mappedBy = "roles", fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> userList = new HashSet<>();
}
class Company {
@Id
@Column(name = "COMPANY_ID")
private Long id;
@ManyToMany(mappedBy = "companies", fetch = FetchType.LAZY)
@JsonIgnore
private Set<User> userList = new HashSet<>();
@OneToMany(mappedBy = "company")
private Set<Product> products;
}
class Product {
@Id
@Column(name = "COMPANY_ID")
private Long id;
@ManyToOne
@JoinColumn(name="COMPANY_ID", nullable=false)
private Company company;
private ProductType productType;
}
Моя конечная цель - получить роли от пользователя, может кто-нибудь помочь, пожалуйста?Большое спасибо заранее!