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. SpringMVC 学习-拦截器 HandlerInterceptor 类

    一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...

  2. python websocket学习使用

    前言 今天看了一些资料,记录一下心得. websocket是html5引入的一个新特性,传统的web应用是通过http协议来提供支持,如果要实时同步传输数据,需要轮询,效率低下 websocket是类 ...

  3. 第七十四节,css边框与背景

    css边框与背景 学习要点: 1.声明边框 2.边框样式 3.圆角边框  本章主要探讨HTML5中CSS边框和背景,通过边框和背景的样式设置,给元素增加更丰富的外观. 声明边框 边框的声明有三个属性设 ...

  4. Sublime Text 2

    常用功能: 安装Package Control:https://sublime.wbond.net/ 多行选择.多行编辑鼠标选中多行,按下 Ctrl+Shift+L (Command+Shift+L) ...

  5. Node.js:回调函数

    概要:本篇博客主要通过对比node.js异步与同步方式读取文件的方式来解释node中回调函数的作用. 1.异步方式读取文件: 新建一个文本文档用于测试,如下图: 代码如下: // node异步方式读取 ...

  6. 读书笔记之ado.net entity framework

    提供了对数据访问的一种抽象层,是更加易于以编程的方式来操作及管理数据 有以下几种模式:Model First, Database First, and Code First 现在主要讨论code Fi ...

  7. react中文API解读二(教程)

    记下自己的react学习之路 ,官方文档写的很详尽,学起来应该比较简单 官方文档地址:react.http://reactjs.cn/react/docs/getting-started.html 2 ...

  8. jQuery 截取double数据 重新赋值

    $('.prioritySort').each(function(i){ $(this).text($(this).text().substring(0,$(this).text().indexOf( ...

  9. 浙江大学Pat 1036 题解

    1036. Boys vs Girls (25) This time you are asked to tell the difference between the lowest grade of ...

  10. HUST 1352 Repetitions of Substrings(字符串)

    Repetitions of Substrings Description The “repetitions” of a string S(whose length is n) is a maximu ...