任何人都可以告诉我,我有一个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;
@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;
}
请通过下面的输出
[
{
"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
在控制台中查看它如何不显示多余列的合并,但为什么在邮递员中却如此显示。
我要留下什么吗?