| |
| 用hibernate对递归数据的操作 |
| |
发布者: 发布时间:2007-11-26 |
|
|
|
在工作中,我们常常会碰到具有递归性质记录的数据,最常见的是某个机构部门节点的数据,某个节点一定会有个父节点属性,同时它也许会有若干子节点。所有的节点数据都会存在数据库中一张表中。这种现象在设计模式上叫Composite模式。下面我就给出一个用hibernate操作这种表的例子,关于hibernate配置和建立表结构的部分请参考我的前一篇文章《利用weblogic的数据源作为hibernate的数据源的例子》1.持久化类Node.javapackage com.jagie.business.organization;/** * <p>Title: </p> * <p>Description: 部门节点</p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: www.jagie.com</p> * @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<?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.测试的代码片断//获取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) ydescription varchar2(255) yparent varchar2(255) y其中y的意思为nullable(可空),同时把我们的节点数据正确的插入了。你可以自己再用session.find()方法来找出某父节点下面的所有子节点了。最后,希望这篇短文对你有用。
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| Hibernate Iterator JCS分析 |
| Hibernate入门 - Transaction |
| Hibernate入门 - 包作用详解 |
| Hibernate入门 - 基础配置 |
| 使用JDBC和Hibernate来写入Blob型数据到Oracle中 |
| Hibernate O/R映射三大基本定则 |
| |
| 最近评论: |
|
|
| 鍥炲 |
|
|
|
| 那个雨天的想法! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(9436) |
|
|
| 如果真的有来生! |
| 四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游,
max(7893) |
|
|
| 左边的风景! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(760) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(7495) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(1880) |
|
|
| 昨夜的狂想曲! |
| wow gold,WoW Gold,world of warcraft gold,WoW Gold, max(1327) |
|
|
| 没有情人的情人节! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(7665) |
|
|
| 没有情人的情人节! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(7082) |
|
|
| 回复:用hibernate对递归数据的操作 |
| 看護師求人
薬剤師求人
seo
seo対策
展览公司
展览公司
北京展览公司
展览展示
展台设计
展台设计
展览展示
猎头
猎头
crm
saas
激光打标机
激光加工
激光打标
激光打码机
北京激光加工
激光打标机
激光加工
激光打码机
噪音治理
噪声治理
隔音屏
隔声屏
激光快速成型机
铸造模拟软件
|
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|