У меня есть пользовательский объект.
@Entity
@Table(name = "t_login_user")
public class User extends Auditable<Long> implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
private Long id;
@Column(name = "user_uid")
private String userUid;
@Column(name = "user_name")
private String userName;
@OneToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name="primary_role_id")
private Role primaryRole;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_login_user_role_map", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private List<Role> roles;
}
Моя роль -
@Entity
@Table(name = "t_login_role")
public class Role extends Auditable<Long> implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="role_id")
private Long roleId;
@Column(name="role_code")
private String roleCode;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_login_role_priv_map", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "priv_id"))
private List<Privilege> privileges;
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "t_login_role_menu_map", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "menu_id"))
private List<Menu> menus;
}
Мое меню:
@Entity
@Table(name = "t_login_menu")
public class Menu extends Auditable<Long> implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id")
private Long id;
@Column(name="menu_text")
private String menuText;
@Column(name="menu_icon")
private String menuIcon;
@Column(name="menu_url")
private String menuURL;
}
Как видите, моя роль имеет несколько привилегий и несколько меню. Проблема, с которой я сталкиваюсь, заключается в том, что когда у меня есть код, такой как
LoggedinUser liu = (LoggedinUser)authentication.getPrincipal();
List<Menu> menus = liu.getPrimaryRole().getMenus();
Если у меня есть две привилегии, скажем READ_DATA и WRITE_DATA
И три Меню 1. ДОМ 2. ПОЛЬЗОВАТЕЛЬ 3. ПРОФИЛЬ
Моя переменная меню имеет значение [HOME, HOME, USER, USER, PROFILE, PROFILE] (то есть 2 привилегии * 3 роли)
Я подозреваю, что это связано с тем, что у моей сущности Role есть несколько аннотаций @ManyToMany.
Я пытался искать онлайн и Stackoverflow, но безрезультатно.
Кто-нибудь сталкивался с этой проблемой? Я делаю что-то в корне неправильно?