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

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

    Java对象持久化的介绍等等

    ### Java对象持久化的详细介绍 #### 一、对象持久化概念 **对象持久化**是指将对象的状态信息(即对象的数据...通过引入ORM框架,可以更好地管理和优化Java应用程序中的数据持久化过程,提高开发效率和程序的健壮性。

    redis的持久化工具

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

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

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

    EJB3持久化

    EJB3.0的这种灵活性使得开发者可以选择最适合他们应用场景的持久化方案。 总结来说,EJB3.0的持久化特性通过引入POJO和JPA,极大地简化了Java企业级应用的持久化编程模型,同时保留了对传统实体Bean的支持。ORM技术...

Global site tag (gtag.js) - Google Analytics