升级到Hibernate3.0的理由

     团队升级一次不容易,总要找到足够的理由或者借口:查询语法的全面增强;真正彻底的OR映射;性能的提升是三个的主要理由。另外,买一送一的,还有四个暂时不是理由的理由。

    查询语法全面增强
    
HQL,Native SQL ,Criteria都有大幅增强,不再有太多无法完成需要sql辅助的地方
    1.HQL语法增强 
       使用Antlr的作为语法引擎
       支持subquery,distinct, nullif,case ,cast,having count(*)在内的绝大部分SQL语法
       支持Bulk-Update,Bulk-Delete 语法
       "update Customer set name = :newName where name = :oldName";
     
    2.Native SQL增强
       
2.0时的Native基本上是流血上市,中看不中用的。3.0时才基本可用。

    3. 非完整对象的查询结果返回Map 而不是Array.
        2.0时按array[0],array[1]访问查询结果根本是无人敢用的语法,Map的好处是可以按名称取值

      " select new map(goods.goodsNo as goodsNo,goods.code as code) from Goods goods"
       Map goods =(Map)list.get(0);
       Strng code = (String)goods.get("code");

     真正的OR映射
      完美支持三种O/R典型映射及其混合
      discrim(整个继承树在同一个表,通过discrim列区分不同的子类)
      unionclass(每个子类一个表,每个表拥有全部属性)    
      joinClass(每个父类每个子类各有一个表,父类的属性在父表,子类的表只包含子类的属性)
    
    4.discrim支持formula虚拟列做标识符 
        不再需要一个单独的discriminator列,可以通过对其他列的计算得出子类的标识符
     <discriminator type="int"
   formula="CASE WHEN company is null THEN 0 WHEN company = 'JBoss' THEN 1 ELSE 2 END"/>

    5.union class支持

     <class name="Being" abstract="true">
        <id name="id" unsaved-value="0" column="bid">
           <generator class="increment"/>
        </id>
     <property name="identity" column="ident"/>
     <union-subclass name="Human" table="aliens">
      <property name="sex" column="sex"/>
     </union-subclass>
    </class> 

    关键性能升级
 
  6.column-level lazy fecth
    2.0的时候只能对one to many的列 lazy fecth,结果找一个对象经常藤连瓜瓜连藤找出10来个对象出来,很恐怖。3.0终于没有这个恶梦了。

 
   买一送一的new feactures
   1.EJB3 annotation,  取代xml-base的hbm文件。
   2.Handwrite CRUD SQL, 向ibatis的地盘讨饭。
   3.持久化XML ,除了POJO外,还支持XML的持久化,方便WebService, ESB类的应用。 
   4.One Class map to mutible Table,打破 one table,one object的范式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值