- packagecom.bjsxt.hibernate;
- importjava.util.Set;
- publicclassNode{
- //标识符
- privateintid;
- //节点名称
- privateStringname;
- //层次
- privateintlevel;
- //是否叶子节点
- privatebooleanleaf;
- //父节点*---1
- privateNodeparent;
- //子节点1---*
- privateSetchildren;
- publicSetgetChildren(){
- returnchildren;
- }
- publicvoidsetChildren(Setchildren){
- this.children=children;
- }
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicbooleanisLeaf(){
- returnleaf;
- }
- publicvoidsetLeaf(booleanleaf){
- this.leaf=leaf;
- }
- publicintgetLevel(){
- returnlevel;
- }
- publicvoidsetLevel(intlevel){
- this.level=level;
- }
- publicStringgetName(){
- returnname;
- }
- publicvoidsetName(Stringname){
- this.name=name;
- }
- publicNodegetParent(){
- returnparent;
- }
- publicvoidsetParent(Nodeparent){
- this.parent=parent;
- }
- }
- <?xmlversion="1.0"?>
- <!DOCTYPEhibernate-mapping(ViewSourceforfulldoctype...)>
- -<hibernate-mappingdefault-cascade="none"default-access="property"default-lazy="true"auto-import="true">
- -<classname="com.bjsxt.hibernate.Node"table="t_node"mutable="true"polymorphism="implicit"dynamic-update="false"dynamic-insert="false"select-before-update="false"optimistic-lock="version">
- -<idname="id">
- <generatorclass="native"/>
- </id>
- <propertyname="name"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
- <propertyname="level"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
- <propertyname="leaf"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
- <many-to-onename="parent"column="pid"unique="false"update="true"insert="true"optimistic-lock="true"not-found="exception"embed-xml="true"/>
- -<setname="children"lazy="extra"inverse="true"sort="unsorted"mutable="true"optimistic-lock="true"embed-xml="true">
- <keycolumn="pid"on-delete="noaction"/>
- <one-to-manyclass="com.bjsxt.hibernate.Node"not-found="exception"embed-xml="true"/>
- </set>
- </class>
- </hibernate-mapping>
- packagecom.bjsxt.hibernate;
- importjava.io.File;
- importjava.util.Iterator;
- importjava.util.Set;
- importorg.hibernate.Session;
- publicclassNodeManager{
- privatestaticNodeManagernodeManager;
- privateNodeManager(){
- }
- publicstaticsynchronizedNodeManagergetInstance(){
- if(nodeManager==null){
- nodeManager=newNodeManager();
- }
- returnnodeManager;
- }
- //创建树型结构
- publicvoidcreateTree(Stringdir){
- Sessionsession=HibernateUtils.getSession();
- try{
- session.beginTransaction();
- Fileroot=newFile(dir);
- saveTree(root,session,null,0);
- session.getTransaction().commit();
- }catch(RuntimeExceptione){
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally{
- HibernateUtils.closeSession(session);
- }
- }
- //递归创建一棵树
- privatevoidsaveTree(Filefile,Sessionsession,Nodeparent,intlevel){
- if(file==null||!file.exists()){
- return;
- }
- booleanisLeaf=file.isFile();
- Nodenode=newNode();
- node.setName(file.getName());
- node.setLevel(level);
- node.setParent(parent);
- node.setLeaf(isLeaf);
- session.save(node);
- File[]subs=file.listFiles();
- if(subs!=null&&subs.length>0){
- for(inti=0;i<subs.length;i++){
- saveTree(subs[i],session,node,level+1);
- }
- }
- }
- publicvoidprintTree(intid){
- Sessionsession=HibernateUtils.getSession();
- try{
- session.beginTransaction();
- Noderoot=(Node)session.load(Node.class,id);
- printNode(root);
- session.getTransaction().commit();
- }catch(RuntimeExceptione){
- e.printStackTrace();
- session.getTransaction().rollback();
- }finally{
- HibernateUtils.closeSession(session);
- }
- }
- privatevoidprintNode(Nodenode){
- if(node==null){
- return;
- }
- intlevel=node.getLevel();
- if(level>0){
- for(inti=0;i<level;i++){
- System.out.print("|");
- }
- System.out.print("--");
- }
- System.out.println(node.getName()
- +(node.isLeaf()?"":"["+node.getChildren().size()+"]"));
- Setchildren=node.getChildren();
- for(Iteratoriter=children.iterator();iter.hasNext();){
- Nodechild=(Node)iter.next();
- printNode(child);
- }
- }
- }