引入
以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<Menu> childrenMenu;
@Column(name = "pid")
private long pid;
private static final long serialVersionUID = 1L;
}
用@OneToMany注释子菜单字段,这里fetch=FetchType.LAZY没用
这里@JoinColumn name属性值和之前的不同,这里pid是数据表里面的字段。
操作
- 添加菜单
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;
}
- 删除菜单
public boolean deleteMenu(long id) {
if(findChildrenMenu(id).size() > 0) {
return false;
}
menuRepository.delete(id);
return true;
}
- 查询子菜单列表
public List<Menu> findChildrenMenu(long id) {
// TODO Auto-generated method stub
return menuRepository.findByPid(id);
}
- 查询父菜单
先查父菜单id,再通过id获取父菜单信息