У меня есть три класса моделей - Пользователь, Меню, Подменю.
@Data
@Entity
@Table(name = "CBR_USER")
public class User {
@Id
@GeneratedValue
@Column(name = "CBR_USER_ID")
private Integer cbrUserId;
@Column(name = "LOG_IN_ID")
private String logInId;
private String userId;
private String password;
@Column(name = "FULL_NAME")
private String FULL_NAME;
private String EMAIL;
private String PHONE;
private Integer ROLE_ID;
private String DESIGNATION;
private String branchId;
private Integer IS_VALID;
@ManyToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@JoinTable(name = "Conf_menu_Access", joinColumns = @JoinColumn(name = "CBR_USER_ID"), inverseJoinColumns = @JoinColumn(name = "id"))
private List<Menu> menuList;
}
Класс меню:
@Data
@Entity
@Table(name = "CONF_MENU")
public class Menu {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_menu")
@SequenceGenerator(name = "seq_menu", sequenceName = "seq_menu", allocationSize = 1)
private Integer id;
private String name;
private String url;
private Integer accessBy;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "menuId")
private List<SubMenu> menuList;
}
и класс подменю
@Data
@Entity
@Table(name = "conf_sub_menu")
public class SubMenu {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_sub_menu")
@SequenceGenerator(name = "seq_sub_menu", sequenceName = "seq_sub_menu", allocationSize = 1)
private Integer id;
@Column(name = "MENU_ID")
private Integer menuId;
private String name;
private String url;
}
после компиляции моего кода генерируется другое имя таблицы сопоставления как
Conf_menu_Access
это доступное для пользователя меню карты таблицы, оно определено в классе User.
Теперь мне нужно реализовать SQL-запрос, который
SELECT ID ,NAME,
CASE
WHEN (SELECT ID FROM CONF_MENU_ACCESS WHERE CBR_USER_ID = 150 AND ID = CMA.ID )>0 THEN 1
ELSE 0
END AS ACCESSBY
FROM CONF_MENU CMA ORDER BY ID ASC
я хочу написать этот запрос внутри тега @ Query , любой может помочь мне сделать это ......