中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Java > 数据库
数据库--用hibernate对递归数据的操作
作者:佚名 时间:2006-09-26 11:51 出处:ccidnet.com 责编:月夜寒箫
              摘要:数据库--用hibernate对递归数据的操作

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

1.持久化类Node.java

package com.jagie.business.organization;

/**
*
Title:

*
Description: 部门节点

*
Copyright: Copyright (c) 2003

*
Company: www.jagie.com

* @author Jagie
* @version 1.0
*/

public class Node {
private String ID;//pk
private String name;//名称
private String description;//描述
private Node parent;//上级部门
private java.util.Set children;//下级部门
public static void main(String[] args) {
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Node getParent() {
return parent;
}
public void setParent(Node parent) {
this.parent = parent;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String toString(){
return name;
}
public java.util.Set getChildren() {
return children;
}
public void setChildren(java.util.Set children) {
this.children = children;
}
}


2.映射文件Node.hbm.xml
column="parent" name="parent" />


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

4.测试的代码片断


//获取net.sf.hibernate.Session和net.sf.hibernate.Transaction;
Session s = JDOUtils.getInstance().getSessionFactory().openSession();
Transaction t = s.beginTransaction();
//建立父节点
Node org = new Node();
org.setName("北京总公司");
org.setDescription("这是北京总公司");

//建立子节点
Node org2 = new Node();
org2.setName("海淀分公司");
org2.setDescription("这是海淀分公司");
//建立子节点对父节点的引用
org2.setParent(org);

//持久化
s.save(org);
s.save(org2);


t.commit();
s.close();


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

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


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有