`
江南白衣
  • 浏览: 550844 次
  • 来自: 广州
社区版块
存档分类
最新评论

ORM透明持久化方案面对的共同困境

阅读更多

原文出处及评论:http://www.blogjava.net/calvin/archive/2006/01/05/26791.html

  作者:江南白衣    
 
   上次FB的吹水摘录:

     除JDBC外的数据访问技术包括EJB,Hibernate,JDO,iBatis等,但凡是ORM的总要面对相同的困境,如果透明持久化的,苦恼就更多 --Java数据访问技术依然在缓慢跨越鸿沟,.Net社区的同学用不着眼热心跳:

     1.查询语言--纷纷重回原来极想摆脱的sql,但实现得又不如SQL成熟。
        因为QueryObject,Criteria API的可读性太差,最后所有技术方案都回到它们原来一力想摆脱的SQL的路上。而且,因为是重新仓促设计,都不如sql 的成熟,总有很多做不到的地方。像刚开始的EJB QL,几乎什么都做不了,而hibernate 3.0 HQL把h2的代码抛弃了重新实现才达到相对满意的水平。

    2.积极载入和懒惰载入--不能如sql般每次随需定制
       ORM与jdbc访问的区别,就是以包含关联对象的对象,而不是以sql自由定制的ResultSet,作为数据载入的主体。

       积极载入策略在载入订单对象时,会接着载入顾客对象、产品对象,而如果产品对象又包含类别对象时.....整个数据库被拖了一小半出来。即使不玩连连看,clob对象的胡乱载入就够头痛了。

      与此对应的就是懒惰载入策略,比如EJB的初始版本,据闻每个属性查询一次数据库,数据库往返次数多得吓人。

      ORM方案会让用户自行定义这两种策略来达到平衡。一般默认采用积极载入,在一对多关联上定义lazy load,还有统一定义积极载入的层数。到了hibernate 3,更可以在列级别上定义lazy load。

      问题是,上述的定义都在hbm文件,每种对象的载入策略只能定义一次。而不能像jdbc那样,根据不同的情况select不同的结果列

      顺带一个问题是那些信息不完全对象,比如产品只有序号和名字,不带其他信息时,在一个纯面向对象环境里不好表示,hibernate提供的component方案也不是太好。

3.透明持久化--对POJO的一些临时操作也会被持久化
     因为持久化是透明的,很容易就会误用,对POJO进行的一些临时操作,一不小心就被保存进数据库中。再加上Session,事务的混乱,远远没有用jdbc跑DML语句那么容易搞清楚发生的事情。

    而且,不是每个程序员都能习惯新的透明持久化环境,都对所用ORM系统的持久化策略理解深刻。何况这些策略以及整合它们的框架如Spring,还经常毫无提示的在升级时发生改动!!!

    所以,每个使用ORM的团队,在项目过程里总会有闹鬼的几天......



分享到:
评论

相关推荐

    CSharp Rod ORM 持久化框架

    本人开发基于C# Attribute 声明式的ORM 框架,自带Sqlite数据库的一个测试例子。 本框架的特点: 1. 无XML配置,基于Attribute的配置方式 2. 可自定义mapping的约定,只需在Model类定义Entity,按约定映射对应的表及...

    ORM_数据持久层_生成工具

    ORM工具在此扮演着桥梁的角色,通过抽象出一套接口或类库,将业务逻辑层与数据存储层解耦,从而实现数据的持久化。 C# 是一种广泛使用的面向对象的编程语言,由微软公司开发,适用于Windows平台。在C#中,有许多ORM...

    自己写的一个持久化层

    标题中的“自己写的一个持久化层”指的是作者创建了一个用于数据存储和检索的软件组件,类似于知名的ORM(对象关系映射)框架Hibernate。持久化层是应用程序中的一个关键部分,它负责将业务对象的数据保存到数据库中...

    第三篇:FluentData轻量级.NET-ORM持久化技术详解.pdf

    第三篇:FluentData轻量级.NET-ORM持久化技术详解.pdf

    数据库持久化 ORM 开发框架

    数据库持久化ORM开发框架是现代软件开发中的一个重要概念,它主要解决了应用程序与数据库之间的交互问题。ORM,全称Object-Relational Mapping,即对象关系映射,是一种编程技术,用于将关系数据库的数据映射到对象...

    编程语言+JAVAspring+ORM框架+数据持久化

    编程语言+JAVAspring+ORM框架+数据持久化**:这是一个关于JAVAspring编程语言的ORM框架的数据持久化的资源,适合有一定JAVAspring基础的开发者。它介绍了JAVAspring的ORM框架的概念、原理和作用,以及如何使用JAVA...

    第三篇:FluentData轻量级.NET-ORM持久化技术详解.doc编程资料

    第三篇:FluentData轻量级.NET-ORM持久化技术详解.doc

    学习笔记之什么是持久化和对象关系映射ORM技术

    学习笔记之什么是持久化和对象关系映射ORM技术,什么是所谓的持久化,什么是ORM

    Spring持久化模板总结

    在Spring框架中,持久化是将应用程序数据存储到数据库的关键环节。Spring提供了多种持久化模板,如JdbcTemplate和HibernateTemplate,以简化数据库操作并减少代码中的样板代码。这两个模板都是Spring JDBC模块的一...

    Java对象持久化技术概述

    本书特别关注Hibernate这一开源框架的应用,因为Hibernate作为ORM(Object Relational Mapping,对象关系映射)工具,已经成为Java开发中最流行的持久化解决方案之一。 #### 二、Java应用程序的分层架构 ##### ...

    Hibernate数据持久化技术

    ORM(对象关系映射)是实现数据持久化的一种常见技术,它允许开发者用面向对象的方式来操作数据库。Hibernate是Java领域中最流行的ORM框架之一,它通过元数据来定义对象和数据库表之间的映射关系,使得Java对象可以...

    持久层和持久化

    在Java中,尤其是通过ORM(对象关系映射)工具如Hibernate进行持久化操作时,它将对象与数据库之间的映射过程自动化,使得开发者可以直接操作对象,而无需关注底层的SQL语句和关系映射,简化了数据库交互的工作。...

    ORM解决方案greenDAO.zip

    greenDAO 是一个可以帮助 Android 开发者快速将 Java 对象映射到 SQLite 数据库的表单中的 ORM 解决方案。http://greendao-orm.com/ 标签:greenDAO

    redis的持久化工具

    3. 支持更复杂的持久化策略,例如自定义RDB和AOF的触发条件,或者提供了更灵活的混合持久化方案。 4. 可能包含了ORM功能,使得操作Redis数据如同操作传统关系型数据库一样简单。 5. 可能提供了一套完整的管理和监控...

    Go-Go关系持久化-一个ORM框架

    本篇文章将深入探讨Go语言中的ORM框架——Go-Go关系持久化,以及其核心特性。 Go-Go关系持久化,简称为Gorp,是一个轻量级的ORM库,旨在简化Go语言与关系型数据库之间的交互。它支持多种数据库,如MySQL、...

    dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysq

    dophon框架的数据库模块,支持mysql,sqlite数据库,带有orm持久化功能与链式操作实例,贴近逻辑习惯,支持mysq

Global site tag (gtag.js) - Google Analytics