hibernate生成树

  1. packagecom.bjsxt.hibernate;
  2. importjava.util.Set;
  3. publicclassNode{
  4. //标识符
  5. privateintid;
  6. //节点名称
  7. privateStringname;
  8. //层次
  9. privateintlevel;
  10. //是否叶子节点
  11. privatebooleanleaf;
  12. //父节点*---1
  13. privateNodeparent;
  14. //子节点1---*
  15. privateSetchildren;
  16. publicSetgetChildren(){
  17. returnchildren;
  18. }
  19. publicvoidsetChildren(Setchildren){
  20. this.children=children;
  21. }
  22. publicintgetId(){
  23. returnid;
  24. }
  25. publicvoidsetId(intid){
  26. this.id=id;
  27. }
  28. publicbooleanisLeaf(){
  29. returnleaf;
  30. }
  31. publicvoidsetLeaf(booleanleaf){
  32. this.leaf=leaf;
  33. }
  34. publicintgetLevel(){
  35. returnlevel;
  36. }
  37. publicvoidsetLevel(intlevel){
  38. this.level=level;
  39. }
  40. publicStringgetName(){
  41. returnname;
  42. }
  43. publicvoidsetName(Stringname){
  44. this.name=name;
  45. }
  46. publicNodegetParent(){
  47. returnparent;
  48. }
  49. publicvoidsetParent(Nodeparent){
  50. this.parent=parent;
  51. }
  52. }

  1. <?xmlversion="1.0"?>
  2. <!DOCTYPEhibernate-mapping(ViewSourceforfulldoctype...)>
  3. -<hibernate-mappingdefault-cascade="none"default-access="property"default-lazy="true"auto-import="true">
  4. -<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">
  5. -<idname="id">
  6. <generatorclass="native"/>
  7. </id>
  8. <propertyname="name"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
  9. <propertyname="level"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
  10. <propertyname="leaf"unique="false"optimistic-lock="true"lazy="false"generated="never"/>
  11. <many-to-onename="parent"column="pid"unique="false"update="true"insert="true"optimistic-lock="true"not-found="exception"embed-xml="true"/>
  12. -<setname="children"lazy="extra"inverse="true"sort="unsorted"mutable="true"optimistic-lock="true"embed-xml="true">
  13. <keycolumn="pid"on-delete="noaction"/>
  14. <one-to-manyclass="com.bjsxt.hibernate.Node"not-found="exception"embed-xml="true"/>
  15. </set>
  16. </class>
  17. </hibernate-mapping>
  1. packagecom.bjsxt.hibernate;
  2. importjava.io.File;
  3. importjava.util.Iterator;
  4. importjava.util.Set;
  5. importorg.hibernate.Session;
  6. publicclassNodeManager{
  7. privatestaticNodeManagernodeManager;
  8. privateNodeManager(){
  9. }
  10. publicstaticsynchronizedNodeManagergetInstance(){
  11. if(nodeManager==null){
  12. nodeManager=newNodeManager();
  13. }
  14. returnnodeManager;
  15. }
  16. //创建树型结构
  17. publicvoidcreateTree(Stringdir){
  18. Sessionsession=HibernateUtils.getSession();
  19. try{
  20. session.beginTransaction();
  21. Fileroot=newFile(dir);
  22. saveTree(root,session,null,0);
  23. session.getTransaction().commit();
  24. }catch(RuntimeExceptione){
  25. e.printStackTrace();
  26. session.getTransaction().rollback();
  27. }finally{
  28. HibernateUtils.closeSession(session);
  29. }
  30. }
  31. //递归创建一棵树
  32. privatevoidsaveTree(Filefile,Sessionsession,Nodeparent,intlevel){
  33. if(file==null||!file.exists()){
  34. return;
  35. }
  36. booleanisLeaf=file.isFile();
  37. Nodenode=newNode();
  38. node.setName(file.getName());
  39. node.setLevel(level);
  40. node.setParent(parent);
  41. node.setLeaf(isLeaf);
  42. session.save(node);
  43. File[]subs=file.listFiles();
  44. if(subs!=null&&subs.length>0){
  45. for(inti=0;i<subs.length;i++){
  46. saveTree(subs[i],session,node,level+1);
  47. }
  48. }
  49. }
  50. publicvoidprintTree(intid){
  51. Sessionsession=HibernateUtils.getSession();
  52. try{
  53. session.beginTransaction();
  54. Noderoot=(Node)session.load(Node.class,id);
  55. printNode(root);
  56. session.getTransaction().commit();
  57. }catch(RuntimeExceptione){
  58. e.printStackTrace();
  59. session.getTransaction().rollback();
  60. }finally{
  61. HibernateUtils.closeSession(session);
  62. }
  63. }
  64. privatevoidprintNode(Nodenode){
  65. if(node==null){
  66. return;
  67. }
  68. intlevel=node.getLevel();
  69. if(level>0){
  70. for(inti=0;i<level;i++){
  71. System.out.print("|");
  72. }
  73. System.out.print("--");
  74. }
  75. System.out.println(node.getName()
  76. +(node.isLeaf()?"":"["+node.getChildren().size()+"]"));
  77. Setchildren=node.getChildren();
  78. for(Iteratoriter=children.iterator();iter.hasNext();){
  79. Nodechild=(Node)iter.next();
  80. printNode(child);
  81. }
  82. }
  83. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值