package com.pt.treeStrut;

 import java.util.Set;

 import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany; @Entity
public class ArticleTree {
int id;
String title;
String content;
ArticleTree p_article; Set<ArticleTree> sons; @OneToMany(mappedBy="p_article",cascade=CascadeType.ALL)
public Set<ArticleTree> getSons() {
return sons;
} public void setSons(Set<ArticleTree> sons) {
this.sons = sons;
}
public ArticleTree(){ }
public ArticleTree(int id, String title, String content){
setId(id);
setTitle(title);
setContent(content);
}
@Id
//@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
} @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="parent_id")
public ArticleTree getP_article() {
return p_article;
}
public void setP_article(ArticleTree p_article) {
this.p_article = p_article;
} @Override
public String toString() {
// TODO Auto-generated method stub
return title + " " + content;
} }

ArticleTree.java

 import java.sql.Connection;
import java.util.HashSet;
import java.util.Set; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; import com.pt.hibernate.Student;
import com.pt.hibernate.Teacher;
import com.pt.treeStrut.ArticleTree; public class Test {
public static void main(String[] arges){
Configuration cfg = new Configuration();
SessionFactory factory = cfg.configure().buildSessionFactory();
//Session ss=factory.openSession();
Session ss= factory.getCurrentSession();
// Teacher hong = new Teacher();
// hong.setName("gaolihong");
// hong.setCourese("english");
//
// Set<Student> students=new HashSet<Student>();
// Student student = new Student();
// student.setId(2);
// student.setSchoolName("DuYangGang2");
// students.add(student);
// hong.setMyStudents(students);
ss.beginTransaction();
// ss.save(hong);
// ss.getTransaction().commit();
ArticleTree a_p = new ArticleTree(1000,"第一章","导论");
ArticleTree a_s1 = new ArticleTree(1001,"第一节","导论——1");
ArticleTree a_s2 = new ArticleTree(1002,"第二节","导论——2"); ArticleTree a_p1 = new ArticleTree(2000,"第二章","光学");
ArticleTree a_s11 = new ArticleTree(2001,"第一节","光学——1");
ArticleTree a_s12 = new ArticleTree(2002,"第二节","光学——2"); a_s11.setP_article(a_p1);
a_s12.setP_article(a_p1);
a_p1.setSons(new HashSet<ArticleTree>()); //否则会报空指针异常
a_p1.getSons().add(a_s11);
a_p1.getSons().add(a_s12); a_s1.setP_article(a_p);
a_s2.setP_article(a_p);
a_p.setSons(new HashSet<ArticleTree>());
a_p.getSons().add(a_s1);
a_p.getSons().add(a_s2); ArticleTree all = new ArticleTree(1,"物理","物理");
a_p1.setP_article(all);
a_p.setP_article(all);
all.setSons(new HashSet<ArticleTree>()); //否则会报空指针异常
all.getSons().add(a_p);
all.getSons().add(a_p1); //ss.save(all); //由于设置了cascade,存储一个,整个树都会存储进去 //ss.save(a_s1);
ss.save(a_s1); //由于设置了cascade,存储一个,整个树都会存储进去
ss.getTransaction().commit();
//ss.close(); //getsession 不用close /****取出树来,并打印*******/
Session ss2= factory.getCurrentSession();
ss2.beginTransaction();
ArticleTree getAll = ss2.load(ArticleTree.class, 1); //取出父节点
printTree(getAll,0);
ss2.getTransaction().commit();
factory.close();
} public static void printTree(ArticleTree parent,int level){
for(int i = 0; i< level; i++){
System.out.print("--");
}
System.out.println(parent);
for(ArticleTree article : parent.getSons()){
printTree(article, level + 1);
}
}
}

test

PS:开发过程中写的bug:

  1、commit的时候提示没有session   原因:session没有beginTransion

  2、提示set<sons>  字段找不到匹配的数据库字段类型,  原因:@oneTomany 写在了get上

hibernate —— 树状存储的更多相关文章

  1. hibernate树状映射

    例如公司的组织机构:一个公司可以有多个子公司,一个子公司子有多个部门. 其实就是一张表, 例子程序: Organization类: package com.oracle.hibernate; impo ...

  2. UVA 1513 Movie collection (树状数组+反向存储)

    题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存 ...

  3. Hibernate 再接触 树状结构设计以及学生课程成绩表的设计

    1 树状结构的设计 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax. ...

  4. HDU 4605 Magic Ball Game (dfs+离线树状数组)

    题意:给你一颗有根树,它的孩子要么只有两个,要么没有,且每个点都有一个权值w. 接着给你一个权值为x的球,它从更节点开始向下掉,有三种情况 x=w[now]:停在此点 x<w[now]:当有孩子 ...

  5. Stars_树状数组

    Problem Description Astronomers often examine star maps where stars are represented by points on a p ...

  6. UVALive 2191 Potentiometers (树状数组)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  7. 2016 大连网赛---Weak Pair(dfs+树状数组)

    题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 Problem Description You are given a rooted ...

  8. 学习笔记 BIT(树状数组)

    痛定思痛,打算切割数据结构,于是乎直接一发BIT 树状数组能做的题目,线段树都可以解决 反之则不能,不过树状数组优势在于编码简单和速度更快 首先了解下树状数组: 树状数组是一种操作和修改时间复杂度都是 ...

  9. POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)

    树状数组求逆序对   转载http://www.cnblogs.com/shenshuyang/archive/2012/07/14/2591859.html 转载: 树状数组,具体的说是 离散化+树 ...

随机推荐

  1. Python编码问题整理【转】

    认识常见编码 GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码 GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名 cp936:中文本地系统是 ...

  2. ZooKeeper搭建

    ZooKeeper系列之一:ZooKeeper简介 ZooKeeper 是一个为分布式应用所设计的分布的.开源的协调服务.分布式的应用可以建立在同步.配置管理.分组和命名等服务的更高级别的实现的基础之 ...

  3. transform translate transition 的区别

    transform是变形,下面有translate transform: rotate旋转/scale缩放/skew扭曲/translate移动/matrix矩阵变形transform连写:rotat ...

  4. 通过this获取当前点击选项相关数据

    很多时候jquery只能或者应该回去一个集合.然后通过this获取触发时间的对象及相关属性 this.jq('#needsType').on("click", ".sel ...

  5. ckplayer 参数设置详解

    参数   使用说明 f s=0时地为普通的视频地址s=1时是一个网址,网址里存放视频地址s=2时是一个网址,网址里输出xml格式的视频地址s=3时是一个swf文件地址,swf和播放器进行交互读取地址 ...

  6. jquery的跳转.禁止全url跳转.只需控制器+方法

    success:function(){ window.location.href="/enterprise/show"; } success:function(){ window. ...

  7. Python之迭代器&装饰器&生成器&正则

    1.迭代器 迭代器是访问数据集合的一种方式,它只能从集合的第一个元素开始顺序访问,直到最后一个元素结束.类似于linux里的cat命令,只能挨行读取文本内容,不可以跳到中间或者尾部读取(不会把所有的数 ...

  8. [kuangbin带你飞]专题四 最短路练习 POJ 3268 Silver Cow Party

    题意: 在一个有向图中求n头牛从自己的起点走到x再从x走回来的最远距离 思路一开始是暴力跑dij…… 讲道理不太可能…… 然后就百度了一下 才知道把矩阵转置的话就只需要求两次x的单源最短路…… /* ...

  9. 虚拟主机VPS区别:DigitalOcean优惠码

    虚拟主机与VPS区别在哪?这里从几个角度解释下: 虚拟化技术 把一台独立服务器用虚拟化技术“切割”开,分配不同的硬件配置,然后分配给不同的普通用户使用,就是虚拟主机的基本思路.部分奸商为了节省成本,甚 ...

  10. Openjudge-计算概论(A)-点与正方形的关系

    描述: 有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴.写一个程序,判断一个给定的点是否在这个正方形内.输入输入坐标x,y输出ye ...