hibernate —— 树状存储
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 —— 树状存储的更多相关文章
- hibernate树状映射
例如公司的组织机构:一个公司可以有多个子公司,一个子公司子有多个部门. 其实就是一张表, 例子程序: Organization类: package com.oracle.hibernate; impo ...
- UVA 1513 Movie collection (树状数组+反向存储)
题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存 ...
- Hibernate 再接触 树状结构设计以及学生课程成绩表的设计
1 树状结构的设计 package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; import javax. ...
- HDU 4605 Magic Ball Game (dfs+离线树状数组)
题意:给你一颗有根树,它的孩子要么只有两个,要么没有,且每个点都有一个权值w. 接着给你一个权值为x的球,它从更节点开始向下掉,有三种情况 x=w[now]:停在此点 x<w[now]:当有孩子 ...
- Stars_树状数组
Problem Description Astronomers often examine star maps where stars are represented by points on a p ...
- UVALive 2191 Potentiometers (树状数组)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 2016 大连网赛---Weak Pair(dfs+树状数组)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5877 Problem Description You are given a rooted ...
- 学习笔记 BIT(树状数组)
痛定思痛,打算切割数据结构,于是乎直接一发BIT 树状数组能做的题目,线段树都可以解决 反之则不能,不过树状数组优势在于编码简单和速度更快 首先了解下树状数组: 树状数组是一种操作和修改时间复杂度都是 ...
- POJ2299Ultra-QuickSort(归并排序 + 树状数组求逆序对)
树状数组求逆序对 转载http://www.cnblogs.com/shenshuyang/archive/2012/07/14/2591859.html 转载: 树状数组,具体的说是 离散化+树 ...
随机推荐
- SpringMVC 学习-拦截器 HandlerInterceptor 类
一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...
- python websocket学习使用
前言 今天看了一些资料,记录一下心得. websocket是html5引入的一个新特性,传统的web应用是通过http协议来提供支持,如果要实时同步传输数据,需要轮询,效率低下 websocket是类 ...
- 第七十四节,css边框与背景
css边框与背景 学习要点: 1.声明边框 2.边框样式 3.圆角边框 本章主要探讨HTML5中CSS边框和背景,通过边框和背景的样式设置,给元素增加更丰富的外观. 声明边框 边框的声明有三个属性设 ...
- Sublime Text 2
常用功能: 安装Package Control:https://sublime.wbond.net/ 多行选择.多行编辑鼠标选中多行,按下 Ctrl+Shift+L (Command+Shift+L) ...
- Node.js:回调函数
概要:本篇博客主要通过对比node.js异步与同步方式读取文件的方式来解释node中回调函数的作用. 1.异步方式读取文件: 新建一个文本文档用于测试,如下图: 代码如下: // node异步方式读取 ...
- 读书笔记之ado.net entity framework
提供了对数据访问的一种抽象层,是更加易于以编程的方式来操作及管理数据 有以下几种模式:Model First, Database First, and Code First 现在主要讨论code Fi ...
- react中文API解读二(教程)
记下自己的react学习之路 ,官方文档写的很详尽,学起来应该比较简单 官方文档地址:react.http://reactjs.cn/react/docs/getting-started.html 2 ...
- jQuery 截取double数据 重新赋值
$('.prioritySort').each(function(i){ $(this).text($(this).text().substring(0,$(this).text().indexOf( ...
- 浙江大学Pat 1036 题解
1036. Boys vs Girls (25) This time you are asked to tell the difference between the lowest grade of ...
- HUST 1352 Repetitions of Substrings(字符串)
Repetitions of Substrings Description The “repetitions” of a string S(whose length is n) is a maximu ...