Spring-Boot jpa之联表的增删改查(三)自联表(many to one)

文章目录

    • 引入
    • 实体类
    • 操作

引入

以Menu为例
每个菜单都有一个父菜单pid字段表示,同时还有许多个子菜单,所以Menu与自己属于many to one 和 one to many的关系

实体类

@Entity

public class Menu implements Serializable {
	@Id
	@GeneratedValue
	private long id;
	@Column(nullable = false)
	private String name;
	@OneToMany(targetEntity = Menu.class, fetch = FetchType.LAZY)
	@JoinColumn(name = "pid")
	@JsonIgnore
	private List childrenMenu;
	@Column(name = "pid")
	private long pid;
	private static final long serialVersionUID = 1L;
}

用@OneToMany注释子菜单字段,这里fetch=FetchType.LAZY没用
这里@JoinColumn name属性值和之前的不同,这里pid是数据表里面的字段。

操作

  1. 添加菜单
	public boolean addMenu(long pid, String name) {
		if (menuRepository.findOne(pid) == null) {
			return false;
		}
		Menu menu = new Menu();
		menu.setName(name);
		menu.setPid(pid);
		menuRepository.save(menu);
		return true;
	}
  1. 删除菜单
	public boolean deleteMenu(long id) {
		if(findChildrenMenu(id).size() > 0) {
			return false;
		}
		menuRepository.delete(id);
		return true;
	}
  1. 查询子菜单列表
	public List findChildrenMenu(long id) {
		// TODO Auto-generated method stub
		return menuRepository.findByPid(id);
	}
  1. 查询父菜单
    先查父菜单id,再通过id获取父菜单信息

你可能感兴趣的:(Spring)