菜单递归查询


springboot 实现递归查询菜单 - 渺小的人类 - 博客园

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing :

springboot 实现递归查询菜单 - 渺小的人类 - 博客园

package com.java1234.entity;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;



/**
 * 菜单实体
 * 
 * @author java1234  
 *
 */
@Entity
@Table(name = "t_menu")
public class Menu {

	@Id
	@GeneratedValue
	private Integer id; // 编号

	@Column(length = 50)
	private String name; // 菜单名称

	@Column(length = 200)
	private String url; // 菜单地址

	private Integer state; // 菜单节点类型 1 根节点 0 叶子节点

	@Column(length = 100)
	private String icon; // 图标

	private Integer pId; // 父菜单Id
	
	@Transient
	private List<Menu> treeList = new ArrayList<>();

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Integer getState() {
		return state;
	}

	public void setState(Integer state) {
		this.state = state;
	}

	public String getIcon() {
		return icon;
	}

	public void setIcon(String icon) {
		this.icon = icon;
	}

	public Integer getpId() {
		return pId;
	}

	public void setpId(Integer pId) {
		this.pId = pId;
	}

	@Override
	public String toString() {
		return "[id=" + id + ", name=" + name + ", url=" + url + ", state=" + state + ", icon=" + icon + ", pId=" + pId
				+ "]";
	}

	/**
	 * @return the treeList
	 */
	public List<Menu> getTreeList() {
		return treeList;
	}

	/**
	 * @param treeList the treeList to set
	 */
	public void setTreeList(List<Menu> treeList) {
		this.treeList = treeList;
	}

 

}
	// -------------------------------递归算法-----------------------------------
	/**
	 * 获取所有权限
	 * 
	 * @return
	 */
	public List<Menu> getMenuList() {
		// 用boot获取分类数据 selectAll在springboot中是获取数据表里的所有数据
		List<Menu> data = menuService.list();
		// 定义新的list
		List<Menu> menuList = new ArrayList<>();
		// 先找到所有的一级分类
		for (Menu menuInfo : data) {
			// 一级菜单的parentId是0
			if (menuInfo.getpId() == -1) {
				menuList.add(menuInfo);
			}
		}
		// 为一级菜单设置子菜单,getChild是递归调用的
		for (Menu parentMenuInfo : menuList) {
			parentMenuInfo.setTreeList(getChilde(parentMenuInfo.getId(), data));
		}
		return menuList;
	}

	/**
	 * 递归查找子菜单
	 * 
	 * @param id       当前菜单id
	 * @param rootList 要查找的列表
	 * @return
	 */
	private List<Menu> getChilde(Integer id, List<Menu> rootList) {
		// 子级
		List<Menu> childList = new ArrayList<>();
		for (Menu menuInfo : rootList) {
			// 遍历所有节点,将父级id与传过来的id比较
			if (menuInfo.getpId().equals(id)) {
				childList.add(menuInfo);
			}
		}
		// 把子级的子级再循环一遍
		for (Menu sonMenuInfo : childList) {
			sonMenuInfo.setTreeList(getChilde(sonMenuInfo.getId(), rootList));
		}
		// 递归退出条件
		if (childList.size() == 0) {
			return null;
		}
		return childList;
	}

	@RequestMapping("/tset")
	@ResponseBody
	public List<Menu> test() {
		List<Menu> menuList = this.getMenuList();

		return menuList;

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值