[转载]用hibernate对递归数据的操作

用hibernate对递归数据的操作
在工作中,我们常常会碰到具有递归性质记录的数据,最常见的是某个机构部门节点的数据,某个节点一定会有个父节点属性,同时它也许会有若干子节点。所有的 节点数据都会存在数据库中一张表中。这种现象在设计模式上叫Composite模式。下面我就给出一个用hibernate操作这种表的例子,关于 hibernate配置和建立表结构的部分请参考我的前一篇文章《 利用weblogic的数据源作为hibernate的数据源的例子

1.持久化类Node.java
  1. package com.jagie.business.organization;
  2. /**
  3. *

    Title:

  4. *

    Description: 部门节点

  5. *

    Copyright: Copyright (c) 2003

  6. *

    Company: www.jagie.com

  7. * @author Jagie
  8. * @version 1.0
  9. */
  10. public class Node {
  11. private String ID;//pk
  12. private String name;//名称
  13. private String description;//描述
  14. private Node parent;//上级部门
  15. private java.util.Set children;//下级部门
  16. public static void main(String[] args) {
  17. }
  18. public String getID() {
  19. return ID;
  20. }
  21. public void setID(String ID) {
  22. this.ID = ID;
  23. }
  24. public String getName() {
  25. return name;
  26. }
  27. public void setName(String name) {
  28. this.name = name;
  29. }
  30. public Node getParent() {
  31. return parent;
  32. }
  33. public void setParent(Node parent) {
  34. this.parent = parent;
  35. }
  36. public String getDescription() {
  37. return description;
  38. }
  39. public void setDescription(String description) {
  40. this.description = description;
  41. }
  42. public String toString(){
  43. return name;
  44. }
  45. public java.util.Set getChildren() {
  46. return children;
  47. }
  48. public void setChildren(java.util.Set children) {
  49. this.children = children;
  50. }
  51. }


2.映射文件Node.hbm.xml
<?xml version='1.0' encoding='UTF-8'?>












column="parent" name="parent" />



3.用SchemaExport创建数据库(略)

4.测试的代码片断

  1. //获取net.sf.hibernate.Session和net.sf.hibernate.Transaction;
  2. Session s = JDOUtils.getInstance().getSessionFactory().openSession();
  3. Transaction t = s.beginTransaction();
  4. //建立父节点
  5. Node org = new Node();
  6. org.setName("北京总公司");
  7. org.setDescription("这是北京总公司");
  8. //建立子节点
  9. Node org2 = new Node();
  10. org2.setName("海淀分公司");
  11. org2.setDescription("这是海淀分公司");
  12. //建立子节点对父节点的引用
  13. org2.setParent(org);
  14. //持久化
  15. s.save(org);
  16. s.save(org2);
  17. t.commit();
  18. s.close();


代码运行后,我们观察数据库,发现已经生成表SYS_Node,其结构为
id varchar2(255)
name varchar2(255) y
description varchar2(255) y
parent varchar2(255) y

其中y的意思为nullable(可空),同时把我们的节点数据正确的插入了。
你可以自己再用session.find()方法来找出某父节点下面的所有子节点了。
最后,希望这篇短文对你有用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-130780/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-130780/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值