Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>JDBC>>用hibernate对递归数据的操作
用hibernate对递归数据的操作
2007-04-13   来源:www.javaresearch.org  作者:未知

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

1.持久化类Node.java
  1. package com.jagie.business.organization;
  2. /**
  3.  * <p>Title: </p>
  4.  * <p>Description: 部门节点</p>
  5.  * <p>Copyright: Copyright (c) 2003</p>
  6.  * <p>Company: www.jagie.com</p>
  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'?>
<!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
  <class name="com.jagie.business.organization.Node" table="SYS_Node">
    <id name="ID">
      <generator class="uuid.hex" />
    </id>
    <property name="name" />
    <property name="description" />
    <set cascade="save-update" inverse="true" lazy="true" name="children">
      <key column="parent" />
      <one-to-many class="com.jagie.business.organization.Node" />
    </set>
    <many-to-one cascade="none" class="com.jagie.business.organization.Node" 
      column="parent" name="parent" />
  </class>
</hibernate-mapping>


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.  //持久化
  16.  s.save(org);
  17.  s.save(org2);
  18.  t.commit();
  19.  s.close();


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

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




  --相关文章--
· 通过JDBC连接oracle数据库的十大技巧 (2007-04-13)
· 第一个JDBC程序 (2007-04-13)
· 符合oo惯例的表现层控制 (2007-04-13)
· 用hibernate对递归数据的操作 (2007-04-13)
· 煮酒论英雄nbsp;-nbsp;漫谈Java数据库存取技术 (2007-04-13)
· 利用weblogic的数据源作为hibernate的数据源的例子 (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接