栏目实体
每个栏目有多个子栏目,一个父栏目
一级栏目无父栏目
hibernate配置

package com.france.bean;import java.util.HashSet;
import java.util.Set;import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;@Entity
@Table(name = "lanmu")
@DynamicUpdate(true)
@DynamicInsert(true)
public class Lanmu implements java.io.Serializable {/*** 栏目 自关联一对多*/private static final long serialVersionUID = 862821212669955478L;private Integer id;private String name;private String description;private Lanmu parentLanmu;private Integer level;private Set<Lanmu> children = new HashSet<Lanmu>(0);public Lanmu() {}@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "lanmu_id", unique = true, nullable = false)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 getDescription() {return description;}public void setDescription(String description) {this.description = description;}@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "parentLanmu", nullable = true)public Lanmu getParentLanmu() {return parentLanmu;}public void setParentLanmu(Lanmu parentLanmu) {this.parentLanmu = parentLanmu;}public Integer getLevel() {return level;}public void setLevel(Integer level) {this.level = level;}@OneToMany(targetEntity=Lanmu.class, mappedBy="parentLanmu", cascade=CascadeType.ALL, fetch = FetchType.EAGER)  @OrderBy("name")public Set<Lanmu> getChildren() {return children;}public void setChildren(Set<Lanmu> children) {this.children = children;}}

查询的时候 本来是参考
MySQL中进行树状所有子节点的查询
但是hibernate已经在对象映射做好了,所以直接根据id得到Lanu对象就可以

@Overridepublic Lanmu findAllChildrenLanmu(int lanmu_id) {// TODO Auto-generated method stubLanmu root=new Lanmu();root=lanmuDAO.get(Lanmu.class, lanmu_id);return root;}

测试代码:

    @Testpublic void testFindAllChildrenLanmu() {Lanmu root=service.findAllChildrenLanmu(1);System.out.println(root.getParentLanmu());//得到nullSystem.out.println("get root ok");Set<Lanmu> c1=root.getChildren();Iterator iter=c1.iterator();while(iter.hasNext()){Lanmu l= (Lanmu)iter.next();System.out.printf("lanmu_id:%d,lanmu_name:%s\n",l.getId(),l.getName());}}

输出:

Hibernate: selectlanmu0_.lanmu_id as lanmu_id1_7_0_,lanmu0_.description as descript2_7_0_,lanmu0_.level as level3_7_0_,lanmu0_.name as name4_7_0_,lanmu0_.parentLanmu as parentLa5_7_0_,children1_.parentLanmu as parentLa5_7_1_,children1_.lanmu_id as lanmu_id1_7_1_,children1_.lanmu_id as lanmu_id1_7_2_,children1_.description as descript2_7_2_,children1_.level as level3_7_2_,children1_.name as name4_7_2_,children1_.parentLanmu as parentLa5_7_2_ fromlanmu lanmu0_ left outer joinlanmu children1_ on lanmu0_.lanmu_id=children1_.parentLanmu wherelanmu0_.lanmu_id=? order bychildren1_.name//得到二级栏目 一级栏目(1)和二级栏目节点(3,4)Hibernate: selectchildren0_.parentLanmu as parentLa5_7_0_,children0_.lanmu_id as lanmu_id1_7_0_,children0_.lanmu_id as lanmu_id1_7_1_,children0_.description as descript2_7_1_,children0_.level as level3_7_1_,children0_.name as name4_7_1_,children0_.parentLanmu as parentLa5_7_1_ fromlanmu children0_ wherechildren0_.parentLanmu=? order bychildren0_.name//得到三级栏目节点(null)(children0_.parentLanmu=3)
Hibernate: selectchildren0_.parentLanmu as parentLa5_7_0_,children0_.lanmu_id as lanmu_id1_7_0_,children0_.lanmu_id as lanmu_id1_7_1_,children0_.description as descript2_7_1_,children0_.level as level3_7_1_,children0_.name as name4_7_1_,children0_.parentLanmu as parentLa5_7_1_ fromlanmu children0_ wherechildren0_.parentLanmu=? order bychildren0_.name//得到另一个三级栏目节点(5)(children0_.parentLanmu=4)
Hibernate: selectchildren0_.parentLanmu as parentLa5_7_0_,children0_.lanmu_id as lanmu_id1_7_0_,children0_.lanmu_id as lanmu_id1_7_1_,children0_.description as descript2_7_1_,children0_.level as level3_7_1_,children0_.name as name4_7_1_,children0_.parentLanmu as parentLa5_7_1_ fromlanmu children0_ wherechildren0_.parentLanmu=? order bychildren0_.name//得到四级栏目节点(null)(children0_.parentLanmu=5)
null
get root ok
lanmu_id:3,lanmu_name:lanmuAA
lanmu_id:4,lanmu_name:lanmuAB

数据库数据

lanmu_id description level name parentLanmu
1 NULL 1 lanmuA NULL
2 NULL 1 lanmuB NULL
3 NULL 2 lanmuAA 1
4 NULL 2 lanmuAB 1
5 NULL 3 lanmuABA 4

最后,配置的时候注意fetch = FetchType.EAGER 的使用范围即可

树状自关联 hibernate配置,查询相关推荐

  1. 树状数组的区间修改+查询

    首先看树状数组是用来求前缀和比较方便的一种数据结构 sum[i] = Sigma a[i] =Sum(bit[x]) 而区间修改也不难实现 就是引入一个差分数组del del[i]表示对i~n的修改 ...

  2. HDU 4031 Attack(线段树/树状数组区间更新单点查询+暴力)

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Sub ...

  3. hdu3966 树链剖分点权模板+线段树区间更新/树状数组区间更新单点查询

    点权树的模板题,另外发现树状数组也是可以区间更新的.. 注意在对链进行操作时方向不要搞错 线段树版本 #include<bits/stdc++.h> using namespace std ...

  4. sql函数: 多级树状目录-根据父ID查询出所有的子ID

    一. 简介 比如说部门,有上级部门,是多级的,需要根据部门ID查询出所有该部门的子部门. 如果是2级,可以通过左连接联查同一张表即可. 但层级数不确定的情况下,就得用sql函数或者存储过程来实现了. ...

  5. hdu 4533(树状数组区间更新+单点查询)

    题意:给你N个矩形,每个矩形给出左下角坐标,右上角坐标,有M个询问,每个询问给出一个时间t,问(0,0),(t,t)的范围内矩形的面积和(重叠的也算). 参考博客:http://blog.csdn.n ...

  6. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

  7. 快速求区间和的有趣算法——树状数组

    好久没写东西,感觉有写些什么的必要了.(高仿鲁迅) 树状数组虽然听起来名字高大上,但是不是很难(前缀和是名字高大上,却水得像海洋) 树状数组在单纯的查询一个区间的和和修改某一个数的效率要超过线段树哦! ...

  8. ACM入门之【树状数组】

    树状数组和线段树具有相似的功能,但他俩毕竟还有一些区别:树状数组能有的操作,线段树一定有:线段树有的操作, 树状数组不一定有.但是树状数组的代码要比线段树短,思维更清晰,速度也更快,在解决一些单点修改 ...

  9. HDU多校1 - 6959 zoto(莫队+树状数组/值域分块)

    题目链接:点击查看 题目大意:在二维平面内有 nnn 个点,表示为 (i,f[i])(i,f[i])(i,f[i]),需要回答 mmm 次询问,每次询问会给出一个矩形,问矩形内有多少个不同的 yyy ...

最新文章

  1. 规格上下限和控制上下限计算_涡街流量计选型时对测量上下限的考虑
  2. 在大厂干了几年开发后,太真实了。
  3. java保留想要的字符,反转Java中的字符,同时保留一些字符 - java
  4. Ubuntu C++ Thread Sleep
  5. C语言代码规范(六)浮点型变量逻辑比较
  6. C语言实现万年历(附代码)
  7. VC++使用ADO开发ACCESS数据库
  8. HDU - 2609 - How many
  9. iOS 不同数据类型存入可变数组
  10. caxa发生文件读写异常_文件和异常
  11. 华为云计算HCIE学习总结-云计算主流技术
  12. `OSError: file error: bad input file` in RDkit with .sdf file
  13. 猿圈笔试系统java_小猿圈分享Java面试题
  14. 以太网之父鲍勃·梅特卡夫获2022图灵奖,76岁进入新领域再出发!
  15. redis核心数据结构以及他的应用场景
  16. HTTP各种请求方法的的幂等性和安全性
  17. putty修改显示服务器ip或域名,putty 标题显示ip
  18. 微信小程序生成海报可保存海报和分享海报
  19. 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境
  20. 图解http笔记 1.17

热门文章

  1. 推荐两个高仿抖音 GitHub 开源项目( iOS 和 Android)
  2. 区块链民生应用两三例——趣链谈让技术有温度
  3. iG/NZT安装使用过程中可能遇到的问题解决办法(根据用户反馈持续更新中...)
  4. 荐读 | 寻找应用场景,谁来为法定数字货币做“二次发行”?
  5. python爬虫设置代理ip池
  6. phpStorm编写markdown神器
  7. 【iMessage苹果证书协议版本】软件安装APNSD-AppID配置中创建结构
  8. Springboot毕设项目大学生勤工俭学系统09i5rjava+VUE+Mybatis+Maven+Mysql+sprnig)
  9. SIP INVITE流程
  10. VuePress快速上手(默认主题)