Может кто-нибудь сказать, пожалуйста, у меня есть RestController
, который возвращает список объектов как ResponseBody
.
Таблицы menu
и submenu
, которые сопоставлены с OneToMany
.
Поэтому, когда контроллер возвращает список объектов, я не знаю, почему он отображает каждый столбец таблицы SubMneu
со столбцом таблицы меню.
Пожалуйста, просмотрите приведенный ниже вывод и скомбинируйте результат, который вы увидите, что каждый столбец из таблицы подменю будет прикреплен к каждому столбцу меню, даже если они имеют различную связь.
Контроллер
@GetMapping("/load/menu")
public ModelAndView oadMainMenu(/* @RequestParam(value = "role") String role */) {
List<MenuLoaderDTO> dto= null;
dto= service.getMenus();
return dto;
}
Услуги
// this is where I'm iteraring
@Override
public List<MenuLoaderDTO> getMenus() {
List<Menu> m= load.loadMenu();
Set<SubMenuDto> l= new HashSet<SubMenuDto>();
List<MenuLoaderDTO> lm= new ArrayList<MenuLoaderDTO>();
m.forEach(e->{
MenuLoaderDTO mld= new MenuLoaderDTO();
mld.setMenu_id(e.getMenu_id());
mld.setMenuName(e.getMenuName());
mld.setRole(e.getRole());
mld.setHref(e.getHref());
Set<SubMenu> temp= e.getSubMenu();
System.out.println(e.getMenuName());
temp.forEach(f->{
SubMenuDto smd= new SubMenuDto();
smd.setSubMenu_id(f.getSubMenu_id());
smd.setSubMneuName(f.getSubMneuName());
smd.setRole(f.getRole());
smd.setHref(f.getHref());
l.add(smd);
mld.setSubMenu(l);
System.out.println(f.getSubMneuName());
});
lm.add(mld);
});
return lm;
}
Меню
@Id
@GenericGenerator(name = "gen", strategy = "increment")
@GeneratedValue(generator = "gen")
private int menu_id;
private String menuName;
private String href;
private String role;
@OneToMany(targetEntity = SubMenu.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER,mappedBy = "menu")
private Set<SubMenu> subMenu;
SubMenu
@Id
@GenericGenerator(name = "gen", strategy = "increment")
@GeneratedValue(generator = "gen")
private int subMenu_id;
private String subMneuName;
private String role;
private String href;
@ManyToOne(targetEntity = Menu.class,cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "menu_id",referencedColumnName = "menu_id")
private Menu menu;
дао
@Autowired
private SessionFactory factory;
@Override
public List<Menu> loadMenu() {
Query query= null;
query= getSession().createQuery("from Menu m");
List<Menu> retriveMenu= null;
try {
retriveMenu = query.list();
}catch (Exception e) {
e.printStackTrace();
}
return retriveMenu;
}
Пожалуйста, пройдите через вывод ниже
PostMan
[
{
"menu_id": 1,
"menuName": "Connection",
"href": "null",
"role": "ADMIN",
"subMenu": [
{
"subMenu_id": 4,
"subMneuName": "Modify Data",
"role": "ADMIN",
"href": "/odify/data",
"menu": null
},
{
"subMenu_id": 2,
"subMneuName": "New Connection",
"role": "ADMIN",
"href": "/add/new",
"menu": null
},
{
"subMenu_id": 3,
"subMneuName": "My Data",
"role": "USER",
"href": "/my/data",
"menu": null
},
{
"subMenu_id": 1,
"subMneuName": "Dump Connection",
"role": "ADMIN",
"href": "/add/dump",
"menu": null
}
]
},
{
"menu_id": 2,
"menuName": "User Data",
"href": "null",
"role": "USER",
"subMenu": [
{
"subMenu_id": 4,
"subMneuName": "Modify Data",
"role": "ADMIN",
"href": "/odify/data",
"menu": null
},
{
"subMenu_id": 2,
"subMneuName": "New Connection",
"role": "ADMIN",
"href": "/add/new",
"menu": null
},
{
"subMenu_id": 3,
"subMneuName": "My Data",
"role": "USER",
"href": "/my/data",
"menu": null
},
{
"subMenu_id": 1,
"subMneuName": "Dump Connection",
"role": "ADMIN",
"href": "/add/dump",
"menu": null
}
]
}
]
Консоль
Connection --- main menu
Dump Connection --- sub menu mapped to above
New Connection ---- submenu mapped to above
User Data ---- main menu
My Data ----- submenu mapped to above main menu
Modify Data ----submenu mapped to above main menu
Посмотрите в консоли, как отображается отсутствие объединения дополнительных столбцов, но почему в почтальоне это отображается так.
Я что-то оставляю позади?