hibernate —— 树状存储

 1 package com.pt.treeStrut;
 2
 3 import java.util.Set;
 4
 5 import javax.persistence.CascadeType;
 6 import javax.persistence.Entity;
 7 import javax.persistence.GeneratedValue;
 8 import javax.persistence.Id;
 9 import javax.persistence.JoinColumn;
10 import javax.persistence.ManyToOne;
11 import javax.persistence.OneToMany;
12
13 @Entity
14 public class ArticleTree {
15     int id;
16     String title;
17     String content;
18     ArticleTree p_article;
19
20     Set<ArticleTree> sons;
21
22     @OneToMany(mappedBy="p_article",cascade=CascadeType.ALL)
23     public Set<ArticleTree> getSons() {
24         return sons;
25     }
26
27
28     public void setSons(Set<ArticleTree> sons) {
29         this.sons = sons;
30     }
31     public ArticleTree(){
32
33     }
34     public ArticleTree(int id, String title, String content){
35         setId(id);
36         setTitle(title);
37         setContent(content);
38     }
39     @Id
40     //@GeneratedValue
41     public int getId() {
42         return id;
43     }
44     public void setId(int id) {
45         this.id = id;
46     }
47     public String getTitle() {
48         return title;
49     }
50     public void setTitle(String title) {
51         this.title = title;
52     }
53     public String getContent() {
54         return content;
55     }
56     public void setContent(String content) {
57         this.content = content;
58     }
59
60     @ManyToOne(cascade=CascadeType.ALL)
61     @JoinColumn(name="parent_id")
62     public ArticleTree getP_article() {
63         return p_article;
64     }
65     public void setP_article(ArticleTree p_article) {
66         this.p_article = p_article;
67     }
68
69
70     @Override
71     public String toString() {
72         // TODO Auto-generated method stub
73         return title + "  " + content;
74     }
75
76
77 }

ArticleTree.java

 1 import java.sql.Connection;
 2 import java.util.HashSet;
 3 import java.util.Set;
 4
 5 import org.hibernate.Session;
 6 import org.hibernate.SessionFactory;
 7 import org.hibernate.cfg.Configuration;
 8
 9 import com.pt.hibernate.Student;
10 import com.pt.hibernate.Teacher;
11 import com.pt.treeStrut.ArticleTree;
12
13
14 public class Test {
15     public static void main(String[] arges){
16         Configuration cfg = new Configuration();
17         SessionFactory factory = cfg.configure().buildSessionFactory();
18         //Session ss=factory.openSession();
19         Session ss= factory.getCurrentSession();
20 //        Teacher hong = new Teacher();
21 //        hong.setName("gaolihong");
22 //        hong.setCourese("english");
23 //
24 //        Set<Student> students=new HashSet<Student>();
25 //        Student student = new Student();
26 //        student.setId(2);
27 //        student.setSchoolName("DuYangGang2");
28 //        students.add(student);
29 //        hong.setMyStudents(students);
30         ss.beginTransaction();
31 //        ss.save(hong);
32 //        ss.getTransaction().commit();
33         ArticleTree a_p = new ArticleTree(1000,"第一章","导论");
34         ArticleTree a_s1 = new ArticleTree(1001,"第一节","导论——1");
35         ArticleTree a_s2 = new ArticleTree(1002,"第二节","导论——2");
36
37         ArticleTree a_p1 = new ArticleTree(2000,"第二章","光学");
38         ArticleTree a_s11 = new ArticleTree(2001,"第一节","光学——1");
39         ArticleTree a_s12 = new ArticleTree(2002,"第二节","光学——2");
40
41         a_s11.setP_article(a_p1);
42         a_s12.setP_article(a_p1);
43         a_p1.setSons(new HashSet<ArticleTree>());    //否则会报空指针异常
44         a_p1.getSons().add(a_s11);
45         a_p1.getSons().add(a_s12);
46
47
48         a_s1.setP_article(a_p);
49         a_s2.setP_article(a_p);
50         a_p.setSons(new HashSet<ArticleTree>());
51         a_p.getSons().add(a_s1);
52         a_p.getSons().add(a_s2);
53
54         ArticleTree all = new ArticleTree(1,"物理","物理");
55         a_p1.setP_article(all);
56         a_p.setP_article(all);
57         all.setSons(new HashSet<ArticleTree>());    //否则会报空指针异常
58         all.getSons().add(a_p);
59         all.getSons().add(a_p1);
60
61         //ss.save(all);    //由于设置了cascade,存储一个,整个树都会存储进去
62
63         //ss.save(a_s1);
64         ss.save(a_s1);    //由于设置了cascade,存储一个,整个树都会存储进去
65         ss.getTransaction().commit();
66         //ss.close();        //getsession  不用close
67
68         /****取出树来,并打印*******/
69         Session ss2= factory.getCurrentSession();
70         ss2.beginTransaction();
71         ArticleTree getAll = ss2.load(ArticleTree.class, 1);  //取出父节点
72         printTree(getAll,0);
73         ss2.getTransaction().commit();
74         factory.close();
75     }
76
77     public static void printTree(ArticleTree parent,int level){
78         for(int i = 0; i< level; i++){
79             System.out.print("--");
80         }
81         System.out.println(parent);
82         for(ArticleTree article : parent.getSons()){
83             printTree(article, level + 1);
84         }
85     }
86 }

test

PS:开发过程中写的bug:

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

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

时间: 2024-08-25 14:34:54

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

Hibernate 树状映射

示例: 类Org表示组织机构,是一个典型的树状结构数据,其属性包括: id,name,children,parent 要将Org映射到数据库中,对parent作多对一的映射,对children作一对多的映射. 我们可以通过三张表来解释其关系 代码实现: 1.建Org实体类 @Entity public class Org { private int id; private String name; private Set<Org> childen = new HashSet<Org>

Hibernate——树状映射

树状映射 假设: 一张表的结构如下: id parent_id name 公司组织架构即树状映射 范例: package com.zgy.hibernate.model; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import ja

左右值编码实现树状存储

聊聊树状结构如何在数据库中存储 昨天有人在QQ小组问起,无限分层的树状结构,数据量比较大,在一万条以上,如何设计数据库的结构.其实这是个老生常谈的问题,一般的做法是有一个pid字段,为了提高效率,还会有个FullPath字段.(一些人还设置一个层级字段,但我不知道这个字段有何作用),FullPath字段可以用id-id-id-.这种方式拼字符串存储,这样可以方便地用 like 语句进行查询某个节点及其子节点. 曾经看到过另外一种存储方式,利用了一般树结构可以转换二叉树的这一做法,用二叉树进行存储

树状映射

Node类: package com.bjsxt.hibernate.树状映射; import java.util.Set; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import java

《Hibernate学习笔记十一》:树状结构设计

<Hibernate学习笔记十一>:树状结构设计 这是马士兵老师讲解Hibernate的一个作业题,树状结构设计,这是一个比较典型的例子,因此有必要写篇博文记录下. 树状结构的设计,它是在同一个类中使用了多对一(ManyToOne)和一对多(OneToMany). 在完成这个题目我们应该按照如下的步骤进行: 1.先思考数据库的模型应该是什么样的?? 数据库中的模型应该如下:即存在id p_id 2.思考面向对象的模型,及如何来进行映射??? 根据数据库中表的特点,对象应该有id name;由于

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

题意:给你n盘歌碟按照(1....n)从上到下放,接着m个询问,每一次拿出x碟,输出x上方有多少碟并将此碟放到开头 直接想其实就是一线段的区间更新,单点求值,但是根据题意我们可以这样想 首先我们倒着存  n--1,接着每次询问时把放碟子放到最后,这样我们要开一个映射数组映射每个碟子在哪个位置 其中我们需要使用树状数组维护每个绝对位置是否有碟子(有些碟子已经放到了后面了),再使用区间求和就好了 #include<set> #include<map> #include<queue

hibernate之树状映射

提到树状映射,许多人肯定会头疼死了,因为看"树状"这俩字就肯定想到会跟数据结构打交道,而数据结构是本科阶段最重要也是最难学的一门专业课.说实话摩罗我<数据结构>这门课学得也不咋滴,花了点时间终于完成了hibernate之树状映射这个小程序. 首先我先定义了个公司组织类(Org),一个组织下面可以有多个子组织,但每个组织都只有一个上级组织,也就是传说中的一对多的关系,但这个关系是双向的.提到双向关系,我们第一件事就是在双向关系的两边都要设双向关联,另外为了防止产生冗余,我们要

Hibernate学习笔记_关系映射_树状结构练习

1         树状结构的设计(至关重要) a) 在同—个类中使用One2Many和Many20ne @Entity public class Org { private int id; private String name; private Set<Org> children=new HashSet<Org>(); private Org parent; @Id @GeneratedValue public int getId() { return id; } public

(POJ 3067) Japan (慢慢熟悉的树状数组)

Japan Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29295   Accepted: 7902 Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Japan is tall island with N cities on the East coas