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 转载: 树状数组,具体的说是 离散化+树 ...
随机推荐
- html5权威指南:表单元素
一.表单标签: 表单标签:http://blog.csdn.net/mylovestart/article/details/8589002 html5新增表单元素: 1.datalist:http:/ ...
- HDU3791二叉搜索树(二叉树)
Problem Description 判断两序列是否为同一二叉搜索树序列 Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去一行是一 ...
- CABasicAnimation 几种停止的回调
一.编写一个简单的动画,使一个UIview从屏幕的左上角移动到左下角,间隔时间3S // // ViewController.m // CAAnimationTest // // Created by ...
- (转) QImage总结
嗯,这个QImage的问题研究好久了,有段时间没用,忘了,已经被两次问到了,突然有点解释不清楚,我汗颜,觉得有必要重新总结下了,不然无颜对自己了. 图像的数据是以字节为单位保存的,每一行的字节数必须是 ...
- python 函数/列表的应用
enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a1 b2 c ...
- sql优化原则
尽量使用性能高的比如left join等,尽量减少数据查询的column,尽量不要查询冗余数据,like的话“%%”是没有 办法使用索引的,但是“%”是可以使用索引的 having以前一直不知道到底真 ...
- 【Loadrunner】初学Loadrunner——参数化设置(Table类型关联数据库)
参数化输入是Loadrrunner里面一个强大的功能,属于Loadrunner的高级使用技巧. 我们在登录系统的时候,需要输入一组定义的用户名和密码,比如有5个虚拟用户同时登陆系统,则这五个用户都用这 ...
- for、while循环的洪荒之力
在python里,如果说print语句是用得最多的话,那么,要我说,除了for语句,谁都不敢认老二. 下面,让我们来看看for语句能搞出什么花样 1. 计时(无限次数) 说到计时,我们先来试下显示当前 ...
- 解决time_wait过多的问题
#netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ LAST_ACK 14SYN_RECV 348ESTABLI ...
- 当用反射获取一个model,这个model里面字段有nullable的时候,获取字段真实类型
Using Reflection to Determine whether an Type is Nullable And Get the underlying Type /// <summar ...