`
dingtao
  • 浏览: 55507 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ORM的树映射实现

阅读更多

我的考虑是用一个level字段代替lft和rgt字段,level字段维护着Category实例的层级关系。
例如,将root的level定义为1(这个在数据库或程序中可配),那么Child 1的level就为1|${id}(其中'|'为Level分层标记,${id}表示当前数据Id或其它可唯一标识的字段值),假定为1|2,同理Child 1.1的level就是1|2|3。
类结构如下所示:使用的是annotation的hibernate

Java代码 复制代码
  1. @Entity  
  2. public class Category implements Serializable {   
  3.   
  4.     /** Level分层标记 */  
  5.     public static final String LEVEL_SPLIT = "|";   
  6.   
  7.     @Id  
  8.     @GeneratedValue  
  9.     private Integer id;   
  10.        
  11.     /** 名称 */  
  12.     private String name;   
  13.   
  14.     /** level */  
  15.     private String level;   
  16.        
  17.     /** 删除标记 */  
  18.     private Boolean delFlag;   
  19.   
  20.     /** 下级的类别 */  
  21.     @OneToMany(fetch = FetchType.LAZY, mappedBy="parent")   
  22.     @OrderBy("id")   
  23.     private List<Category> children = new ArrayList<Category>();   
  24.   
  25.     /** 上级的类别 */  
  26.     @ManyToOne  
  27.     @JoinColumn(name = "category_id")   
  28.     private Category parent;   
  29.        
  30.     // 省略所有 getter/setter 方法...   
  31. }  


维护后数据库中的数据如下: 



查找某个特定类型及其子类,只需要获得当前类型的level值,然后查找 (level like 'xxxx%')即可。如下所示:
Rails中需要重写Category中类似find的方法。

分享到:
评论

相关推荐

    orm-fetch-dsl:使用 ORM 查询急切获取列的 DSL

    大多数 ORM 实现都使用部分对象 - 同一个对象可以在多个查询中重复使用,但它是部分获取的 - 每个查询指定要获取的对象的哪些字段(映射到表中的列)。 访问任何未明确预取的字段将导致 ORM 从数据库中延迟加载它。...

    Java基于SSM(Spring+SpringMVC+MyBatis)树品种资源数据管理系统.zip

    Mybatis框架是一个基于ORM的持久化框架,Mybatis框架不是一个完整的ORM实现,而是半自动化的ORM实现。Mybatis框架的主要特点是SQL映射器机制 持久化:就是将内存中有用的数据以某种技术保存起来,并且可以再次取出来...

    [其他类别]JSP无限级分类目录树_sorttree.zip

    MyBatis或Hibernate可以简化数据库操作,提供了方便的ORM(对象关系映射)功能,使得数据的持久化变得简单和高效。 通过以上技术选择和框架搭建,该项目可以实现一个高性能、可扩展性强的Web应用程序。开发人员可以...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     2.2.2 ORM中间件的基本使用方法  2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  ...

    深入浅出Hibernate中文版 part2

    1.3 持久层设计与ORM 1.4 持久层框架概述 第2部分 Hibernate 第2章 Hibernate概述 第3章 快速起步 3.1 准备工作 3.2 Hibernate配置 3.3 日志配置 3.4 第一段代码 3.5 代码初解 第4章 Hibernate基础 4.1 ...

    深入浅出Hibernate中文版 part1

    1.3 持久层设计与ORM 1.4 持久层框架概述 第2部分 Hibernate 第2章 Hibernate概述 第3章 快速起步 3.1 准备工作 3.2 Hibernate配置 3.3 日志配置 3.4 第一段代码 3.5 代码初解 第4章 Hibernate基础 4.1 ...

    软件系统设计方案.pdf

    Mybatis中数据库的操作(sql)采⽤xml⽂件配置,解除了sql和代码的耦合提供映射标签,⽀持对象和 和数据库orm字段关系的映射,⽀持对象关系映射标签,⽀持对象关系的组建。 四、数据库设计 四、数据库设计 本项⽬⽬前...

    2nova-test:在这里测试

    2.7.x 教义/ [dbal | orm]:2.6.x(使用QueryBuilders和缓存进行选择的强制性示例,当使用*教义/ orm时,您必须使用yaml映射和强制使用实体存储库的实体) 树枝/小树枝:1.x部署 # Update package listsapt-get ...

    URULE是一款基于RETE算法的纯Java规则引擎.zip

    数据库客户端工具用于连接、查询、更新数据库,ORM(对象关系映射)工具简化了数据操作和持久化层的开发工作。 总之,开发工具极大地提升了软件工程师的工作效率,保证了开发过程中的准确性与一致性,同时也促进了...

    asp.net知识库

    HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可! 服务器自定义开发二之客户端脚本回发 Web开发: 使用URL重写WEB主题切换 如何在Asp.Net1.1中实现页面模板(所谓的...

    antlr4权威指南

    Hibernate对象-关系映射框架(ORM)使用ANTLR来处理HQL语言。  除了这些鼎鼎大名的项目之外,还可以利用ANTLR构建各种各样的实用工具,如配置文件读取器、遗留代码转换器、维基文本渲染器,以及JSON解析器。我编写...

    DCLPS:DCLPS:数据库控件加载和提示系统-开源

    可以将FRESHHH DCLPS视为对象关系映射系统ORM框架。 它是一个强大的结构良好的面向Web的编程系统,允许仅通过对javascript进行编码即可创建Web系统(网站)。 这可能是因为它使用了javascript请求的一些服务器php...

Global site tag (gtag.js) - Google Analytics